import Ipi from "./ipi"; import Icms from "./icms"; import Cofins from "./cofins"; import Pis from "./pis"; import IBSCBS from "./ibscbs"; export default class Imposto { public total_tributos_federal = 0.0; public total_tributos_estadual = 0.0; public total_tributos_municipal = 0.0; public total_tributos = 0.0; public ipi: Ipi; public icms: Icms; public cofins: Cofins; public pis: Pis; public ibscbs?: IBSCBS; constructor(json) { json = json || {}; let produto = json.produto; this.ipi = new Ipi(json.ipi || (produto && produto.imposto && produto.imposto.ipi) || {}); this.icms = new Icms(Object.assign({}, { crtEmpresa: json.crtEmpresa }, json.icms || (produto && produto.imposto && produto.imposto.icms) || {})); this.cofins = new Cofins(json.cofins || (produto && produto.imposto && produto.imposto.cofins) || {}); this.pis = new Pis(json.pis || (produto && produto.imposto && produto.imposto.pis) || {}); let ibscbs = json.ibscbs || (produto && produto.imposto && produto.imposto.ibscbs); if (this.hasIBSCBSCst(ibscbs)) { this.ibscbs = new IBSCBS(ibscbs); } this.total_tributos_federal = json.total_tributos_federal || 0.0; this.total_tributos_estadual = json.total_tributos_estadual || 0.0; this.total_tributos_municipal = json.total_tributos_municipal || 0.0; this.total_tributos = json.total_tributos || (json.quantidade || 0.0 * json.valor_unitario || 0.0) * (this.total_tributos_federal + this.total_tributos_estadual + this.total_tributos_municipal); /* if (produto){ this.icms.fromProduto(Object.assign(produto.imposto.icms || {}, {crtEmpresa : json.crtEmpresa })); this.ipi.fromProduto(produto.imposto.ipi); this.cofins.fromProduto(produto.imposto.cofins); this.pis.fromProduto(produto.imposto.pis); } */ this.recalc({ quantidade: json.quantidade, valor_unitario: json.valor_unitario, extra: json.extra }); } public recalc(value: ({ quantidade: number, valor_unitario: number, extra: number })) { this.icms.recalc({ quantidade: value.quantidade, valor_unitario: value.valor_unitario, extra: value.extra, vipi: this.ipi.vipi }); this.pis.recalc({ quantidade: value.quantidade, valor_unitario: value.valor_unitario, extra: value.extra, vipi: this.ipi.vipi }); this.cofins.recalc({ quantidade: value.quantidade, valor_unitario: value.valor_unitario, extra: value.extra, vipi: this.ipi.vipi }); if (this.ibscbs) { this.ibscbs.recalc({ valor_final: ((value.quantidade || 1) * (value.valor_unitario || 0.0)) + (value.extra || 0.0), vicms: this.icms.vicms, vpis: this.pis.vpis, vcofins: this.cofins.vcofins, vipi: this.ipi.vipi }); } this.zeraItensIndisponiveis(this) } private hasIBSCBSCst(ibscbs?) { return ibscbs && ibscbs.cst !== undefined && ibscbs.cst !== null && ibscbs.cst !== ''; } zeraItensIndisponiveis(imposto?) { let propertiesAvaibles = this.isFieldAvailableForCst(imposto.icms.cst || imposto.icms.csosn); Object.getOwnPropertyNames(imposto.icms).map(prop => { if ((prop == 'cst' || prop == 'csosn') && !propertiesAvaibles[prop]) return; return imposto.icms[prop] = propertiesAvaibles[prop] ? imposto.icms[prop] : 0; }); } isFieldAvailableForCst(cst?) { return { orig: ['00','10','20','30','40','41','50','51','60','70','90', '101','102','103','201','202','203','300','400','500','900'].includes(cst), cst: ['00','10','20','30','40','41','50','51','60','70','90'].includes(cst), csosn: ['101','102','103','201','202','203','300','400','500','900'].includes(cst), modbc: ['00','10','20','51','70','90','900'].includes(cst), predbc: ['20','70','90','900'].includes(cst), vbc: ['00','10','20','51','70','90','900'].includes(cst), picms: ['00','10','20','40','41','50','51','70','90','900'].includes(cst), vicms: ['00','10','20','40','41','50','51','70','90','900'].includes(cst), modbcst: ['10','30','70','90','201','202','203','900'].includes(cst), pmvast: ['10','30','70','90','201','202','203','900'].includes(cst), predbcst: ['10','30','70','90','201','202','203','900'].includes(cst), vbcst: ['10','30','70','90','201','202','203','900'].includes(cst), picmsst: ['10','30','70','90','201','202','203','900'].includes(cst), vicmsst: ['10','30','70','90','201','202','203','900'].includes(cst), vbcstret: ['60','90','500','900'].includes(cst), pcredsn: ['101','201','900'].includes(cst), vcredicmssn: ['101','201','900'].includes(cst), vicmsstdesti: ['41','90','900'].includes(cst), vbcstdest: ['41','90','900'].includes(cst), motdesicms: ['20', '30','40','90','900'].includes(cst), vicmsstret: ['41','60','90','500'].includes(cst), pbcop: ['90','900'].includes(cst), ufst: ['90','900'].includes(cst), pbc: ['00','10','20','51','70','90','900'].includes(cst), pst: ['60','500'].includes(cst), vbcfcp: ['10','20','51','70','90'].includes(cst), pfcp: ['00','10','20','51','70','90'].includes(cst), vfcp: ['00','10','20','51','70','90'].includes(cst), vbcfcpst: ['10','30','70','90','201','202','900'].includes(cst), pfcpst: ['10','30','70','90','201','202','900'].includes(cst), vfcpst: ['10','30','70','90','201','202','900'].includes(cst), vbcfcpstret: ['60','500'].includes(cst), pfcpstret: ['60','500'].includes(cst), vfcpstret: ['60','500'].includes(cst), vicmsdeson: ['20', '30','40','90','900'].includes(cst) }; } }