prod editarProduto:

prod: {
        qtd: null,
        cfop: null,
        CEST: null,
        cst: null,
        bc_icms: 0,
        bc_icms_st: 0,
        p_icms: 0,
        p_icms_st: 0,
        cEnqIPI: null,
        cstIpi: 0.00,
        bcIPI: 0.00,
        aliqIpi: 0.00,
        bcPis: 0.00,
        aliqPis: 0.00,
        bcCofins: null,
        aliqCofins: null,
        valor_venda: null,
        p_red_bc_st: 0,
        p_mva_st: 0,
        p_cred_sn: 0,
        mod_bc_icms_st: 0,
        v_icms_st: 0,
        v_st: 0,
        v_icms: 0,
        v_cred_sn: 0,
        origICMS: 0,
        numeroPedidoCompra: '',
        itemPedidoCompra: 0
      },

imposto service

export default {

  convertToProd(prod) {
    return {
      descricao: prod.xProd,
      codigo: prod.cProd,
      ncm_sh: prod.NCM,
      qtd: Number(prod.qCom),
      cfop: prod.CFOP,
      CEST: prod.CEST,
      cst: prod.cstICMS,
      p_icms: prod.pICMS,
      bc_icms: prod.vBCICMS,
      p_icms_st: prod.pICMSST,
      bc_icms_st: prod.vBCICMSST,
      origICMS: prod.origICMS ? prod.origICMS : 0,
      cEnqIPI: prod.cEnqIPI,
      cstIpi: prod.cstIPI,
      bcIPI: prod.vBCIPI,
      aliqIpi: prod.pIPI,
      bcPis: prod.vBCPIS,
      cstPis: prod.cstPIS,
      aliqPis: prod.pPIS,
      bcCofins: parseFloat(prod.vBCCOFINS),
      cstCofins: prod.cstCOFINS,
      aliqCofins: prod.pCOFINS,
      valor_venda: prod.vUnCom,
      numeroPedidoCompra: prod.xPed,
      itemPedidoCompra: prod.nItemPed,
      p_red_bc_st: parseFloat(prod.pRedBCST),
      p_mva_st: prod.pMVAST,
      mod_bc_icms_st: parseInt(prod.modBCICMSST),
      v_cred_sn: prod.vCredICMSSN,
      p_cred_sn: prod.pCredSN,
      v_icms_st: prod.vICMSST,
      v_st: prod.vST,
      v_ipi: prod.vIPI
    };
  },

  calculateTotalProd(produto) {
    let bc_icms = 0;
    let ipi = 0.00;
    let pis = 0.00;
    let cofins = 0.00;

    if(produto.cEnqIPI && produto.cstIpi && produto.bcIPI && produto.aliqIpi) {
      ipi = parseFloat(produto.bcIPI) / 100 * parseFloat(produto.aliqIpi);
      ipi = (Math.round((parseFloat(ipi) * 100)) / 100).toFixed(2)
    }

    if(produto.bcPis && produto.aliqPis) {
      pis = parseFloat(produto.bcPis) / 100 * parseFloat(produto.aliqPis);
      pis = (Math.round((parseFloat(pis) * 100)) / 100).toFixed(2)
    }

    if(produto.bcCofins && produto.aliqCofins) {
      cofins = parseFloat(produto.bcCofins) / 100 * parseFloat(produto.aliqCofins);
      cofins = (Math.round((parseFloat(cofins) * 100)) / 100).toFixed(2)
    }

    this.calcularImpostos(produto);

    let produtoNota = {
      cProd: produto.codigo,
      xProd: produto.descricao,
      qCom: parseFloat(produto.qtd),
      vUnCom: Number(parseFloat(produto.valor_venda)),
      vProd: Number(parseFloat(produto.valor_venda)) * produto.qtd,
      NCM: produto.ncm_sh,
      CFOP: produto.cfop ? produto.cfop : produto.codigo.cfop,
      CEST: produto.CEST ? produto.CEST : '',
      cstICMS: produto.cst ? produto.cst : produto.codigo.cst,

      //icms normal
      vBCICMS: bc_icms,
      pICMS: produto.p_icms,
      vICMS: produto.v_icms,
      origICMS: produto.origICMS,

      //icms st
      vICMSST: produto.v_icms_st,
      pICMSST: produto.p_icms_st,
      vBCICMSST: produto.bc_icms_st,
      pRedBCST:  parseFloat(produto.p_red_bc_st),
      pMVAST: Number(parseFloat(produto.p_mva_st)),
      pCredSN: Number(parseFloat(produto.p_cred_sn)),
      modBCICMSST: parseInt( produto.mod_bc_icms_st),
      vCredICMSSN: produto.v_cred_sn,
      vST: produto.v_st,

      cEnqIPI: produto.cEnqIPI,
      cstIPI: Number(produto.cstIpi),
      vBCIPI: Number(produto.bcIPI),
      pIPI:  Number(produto.aliqIpi),
      vIPI: Number(parseFloat(ipi)),
      vBCPIS: Number(produto.bcPis),
      pPIS: Number(produto.aliqPis),
      cstPIS: Number(produto.cstPis),
      vPIS: Number(parseFloat(pis)),
      vBCCOFINS: Number(produto.bcCofins),
      cstCOFINS: Number(produto.cstCofins),
      pCOFINS: Number(produto.aliqCofins),
      vCOFINS: Number(parseFloat(cofins)),

      xPed: produto.numeroPedidoCompra ? produto.numeroPedidoCompra : '',
      nItemPed: produto.itemPedidoCompra ? Number(parseFloat(produto.itemPedidoCompra)) : 0
    }
    return produtoNota;
  },

  calcularImpostos(prod) {
    let quantidade = parseFloat(prod.qtd);

    let bcICMS = prod.valor_venda * quantidade;
    if(!bcICMS){
      bcICMS = 0
    }
    prod.bc_icms = bcICMS;

    let vBCICMSST = bcICMS + (bcICMS * prod.p_mva_st) / 100 - (bcICMS * prod.p_red_bc_st) / 100;
    if(!vBCICMSST){
      vBCICMSST = 0
    }
    prod.bc_icms_st = Number(vBCICMSST.toFixed(2));

    let vICMSST = (prod.bc_icms_st * prod.p_icms_st) / 100;
    if(!vICMSST){
      vICMSST = 0
    }
    prod.v_icms_st = Number(vICMSST.toFixed(2));

    let vICMS = (prod.bc_icms * prod.p_icms) / 100;
    if(!vICMS){
      vICMS = 0
    }
    prod.v_icms = Number(vICMS.toFixed(2));

    let vCREDSN = (bcICMS * prod.p_cred_sn) / 100;
    if(!vCREDSN){
      vCREDSN = 0
    }
    prod.v_cred_sn = Number(vCREDSN.toFixed(2));

    let vST = Number((prod.v_icms_st).toFixed(2));
    if(!vST){
      vST = 0
    }
    prod.v_st = vST;

    if (prod.v_st <= 0) {
      prod.v_st = 0;
    }

    return prod;
  },

  calculateTotalNota(nota) {
    nota.vICMS = 0;
    nota.vICMSST = 0;
    nota.vST = 0;
    nota.vBC = 0;
    nota.vBCST = 0;
    nota.vIPI = 0;
    nota.vPIS = 0;
    nota.vCOFINS = 0;
    nota.bc_icms = 0;
    nota.bc_icms_st = 0;
    nota.v_icms = 0;
    nota.v_icms_st = 0;

    let porcentagemDescontoGeral = 0;
    if(nota.vDesc){
      porcentagemDescontoGeral = Number(parseFloat(nota.vDesc)) / parseFloat(nota.vProd);
    }

    let porcentagemDespesa = 0;
    if(nota.vOutro){
      porcentagemDespesa = parseFloat(nota.vOutro) / parseFloat(nota.vProd);
    }

    nota.vProd = 0;

    for(let prod of nota.produtos){
      if(prod.cstICMS === 201 || prod.cstICMS === 202 || prod.cstICMS === 203 || prod.cstICMS === 900){
        nota.vICMSST += prod.vICMSST;
        nota.vBCST += prod.vBCICMSST;
        nota.vST += prod.vST;
      }

      if(prod.cstICMS === 900){
        nota.vICMS += prod.vICMS;
        nota.vBC += prod.vBCICMS;
      }

      nota.vIPI += prod.vIPI;
      nota.vPIS += prod.vPIS;
      nota.vCOFINS += prod.vCOFINS;

      prod.vProd = Number(prod.qCom) * prod.vUnCom
      nota.vProd += parseFloat(prod.vProd);

      let desc_prod = 0;
      let despesa_prod = 0;

      if(porcentagemDescontoGeral > 0){
        desc_prod = Math.round((((prod.qCom * prod.vUnCom)) * (porcentagemDescontoGeral)*100))/100;
        prod.vDesc = desc_prod;
      }
      if(porcentagemDespesa > 0){
        despesa_prod = Math.round(((prod.qCom * prod.vUnCom)) * (porcentagemDespesa)*100)/100;
        prod.vOutro = despesa_prod;
      }
    }

    if(nota.vDesc < 0) {
      return
    }
    if(nota.vOutro < 0){
      return
    }

    if(nota.vDesc || nota.vOutro) {

      let vnf_final_desc

      let valor_desc = nota.vDesc ? nota.vDesc : 0;
      let valor_outro = nota.vOutro ? nota.vOutro : 0;
      vnf_final_desc = parseFloat(nota.vProd.toFixed(2)) - parseFloat(valor_desc) + parseFloat(valor_outro) + parseFloat(nota.vST) + parseFloat(nota.vIPI);

      nota.vNF = +vnf_final_desc.toFixed(2)
      nota.pagamentos[0].vPag = +vnf_final_desc.toFixed(2)
    } else {
      let vnf_final

      vnf_final = parseFloat(nota.vProd.toFixed(2)) + parseFloat(nota.vST) + parseFloat(nota.vIPI)
      nota.vNF = +vnf_final.toFixed(2)
      nota.pagamentos[0].vPag = +vnf_final.toFixed(2)
    }

    return nota;
  }
}

Nota Service

import { http } from './HttpService.js'
import { http as httpNode } from '../HttpService.js'

export default {
	load(params = '') {
		return http.get('nota' + params)
	},
	sum(params = '') {
		return http.get('nota/resumo' + params)
	},
	show(id) {
		return http.get(`nota/${id}`)
	},
	show(id) {
		return http.get(`nota/${id}`)
	},
	eviarEmail(params = '',data) {
		return http.post(`fiscal/email`+params,data)
	},
	cancelar(id, xJust) {
		let just = {
			"xJust": xJust
			}
		return http.post(`fiscal/cancelar/${id}`, just)
	},
	requestCnf(id, xJust) {
		return httpNode.get(`fiscal/cnf`)
	},
	createOrUpdate(obj, salva, mod) {
    let transp = obj.transp;
		let nota = {
			emit: {
        CNPJ: JSON.parse(localStorage.getItem('app_user')).instalacao.cnpj.replace(/\D/g,'')
			},
			ide: {
				natOp: obj.natOp,
				cNF: obj.cNF,
				verProc: "YoogaApp",
				mod: obj.mod || mod,
				tpNF: obj.tpNF,
				finNFe: obj.finNFe,
				refNFes: obj.refNFes
			},
			dest: {

			},
			transp: {
				"modFrete":obj.modFrete
			},
			total: {
				vProd: obj.vProd,
				vNF: obj.vNF,
				vBC: obj.vBCICMS,
				vICMS: obj.vICMS ? obj.vICMS : 0,
				vBCST: obj.vBCST,
				vST: obj.vST ? obj.vST : 0,
				vDesc: parseFloat(obj.vDesc) ? parseFloat(obj.vDesc) : 0,
				vOutro: obj.vOutro ? obj.vOutro : 0,
        vIPI: obj.vIPI ? obj.vIPI : 0,
        vPIS: obj.vPIS ? obj.vPIS : 0,
        vCOFINS: obj.vCOFINS ? obj.vCOFINS : 0
			},
			det: [

			],
			pag: [

			],
      estoque: obj.estoque

		}

    try {
      if(transp && transp.transportadora && transp.transportadora.id) {
        nota.transp.transporta = transp.transportadora;
        nota.transp.vol = transp.vol

        if(nota.transp.transporta.CNPJ) {
          delete nota.transp.transporta.CPF;
        } else if(nota.transp.transporta.CPF) {
          delete nota.transp.transporta.CNPJ;
        }
      }
    } catch(err) {
      console.log('Erro transp nota service: ',err)
      throw new Error('Erro ao enviar transportadora')
    }

		if(obj.infCpl){
			nota.infAdic = {};
			nota.infAdic = {
				"infCpl": obj.infCpl
			};
		}

		//===================================================================================================
		// Produtos
		//===================================================================================================
		for(let produto of obj.produtos) {
			let obj = {
				"cProd": produto.cProd,
				"xProd": produto.xProd,
				"CEST": produto.CEST ? produto.CEST : '',
				"NCM": produto.NCM ? produto.NCM : produto.ncm_sh,
				"CFOP": produto.CFOP,
				"uCom": this.getUcomEnum(produto.unidade),
				"qCom": parseFloat(String(produto.qCom).replace(',','.')) ? parseFloat(String(produto.qCom).replace(',','.')) : 0,
				"vUnCom": produto.vUnCom,
				"cstICMS": produto.cstICMS ? produto.cstICMS : produto.CST,
				"vDesc": produto.vDesc ?  produto.vDesc : 0,
				"vOutro": produto.vOutro ? produto.vOutro : 0,
				"vBCICMS" :  parseFloat(produto.vBCICMS) ? parseFloat(produto.vBCICMS) : 0,
        "origICMS": parseInt(produto.origICMS) ? parseInt(produto.origICMS) :0,
				"pICMS": parseFloat(produto.pICMS) ? parseFloat(produto.pICMS) : 0,
				"vICMS": parseFloat(produto.vICMS) ? parseFloat(produto.vICMS) : 0,
				"vBCICMSST" : parseFloat(produto.vBCICMSST) ? parseFloat(produto.vBCICMSST) : 0,
				"pICMSST": parseFloat(produto.pICMSST) ? parseFloat(produto.pICMSST) : 0,
				"vICMSST": parseFloat(produto.vICMSST) ? parseFloat(produto.vICMSST) : 0,
        "pIPI": parseFloat(produto.pIPI) ? parseFloat(produto.pIPI) : 0,
        "vIPI": parseFloat(produto.vIPI) ? parseFloat(produto.vIPI) : 0,
        "cEnqIPI": produto.cEnqIPI ? produto.cEnqIPI : 999,
        "cstIPI": produto.cstIPI ? produto.cstIPI : 99,
        "vBCIPI": parseFloat(produto.vBCIPI) ? parseFloat(produto.vBCIPI) : 0,
        "cstPIS": produto.cstPIS ? produto.cstPIS : 1,
        "vBCPIS": parseFloat(produto.vBCPIS) ? parseFloat(produto.vBCPIS) : 0,
        "pPIS": parseFloat(produto.pPIS) ? parseFloat(produto.pPIS) : 0,
        "vPIS": parseFloat(produto.vPIS) ? parseFloat(produto.vPIS) : 0,
        "cstCOFINS": produto.cstCOFINS ? produto.cstCOFINS : 1,
        "vBCCOFINS": parseFloat(produto.vBCCOFINS) ? parseFloat(produto.vBCCOFINS) : 0,
        "pCOFINS": parseFloat(produto.pCOFINS) ? parseFloat(produto.pCOFINS) : 0,
        "vCOFINS": parseFloat(produto.vCOFINS) ? parseFloat(produto.vCOFINS) : 0,
				"xPed": produto.xPed,
				"nItemPed": parseFloat(produto.nItemPed),
        "pRedBCST": parseFloat(produto.pRedBCST) ? parseFloat(produto.pRedBCST) : 0 ,
        "pMVAST": parseFloat(produto.pMVAST) ? parseFloat(produto.pMVAST) : 0,
        "pCredSN": parseFloat(produto.pCredSN) ? parseFloat(produto.pCredSN) : 0,
        "modBCICMSST": parseFloat(produto.modBCICMSST) ? parseFloat(produto.modBCICMSST) : 0,
        "vST": parseFloat(produto.vST) ? parseFloat(produto.vST) : 0,
        "vCredICMSSN": parseFloat(produto.vCredICMSSN) ? parseFloat(produto.vCredICMSSN): 0,
			}

			nota.det.push(obj)
		}

		//===================================================================================================
		// Produtos
		//===================================================================================================
    try {
      nota.pag.push({
        "tPag": obj.pagamentos[0].tPag,
        "vPag": obj.pagamentos[0].vPag,
        "xPag": this.getPagNome(obj.pagamentos[0].tPag)
      });
    } catch(err) {
      console.log('Erro pagamentos nota: ', err);
      throw new Error(err);
    }

		nota.dest = obj.destinatario

		if(obj.id) {
			nota.id = obj.id
			nota.codigo = obj.id

			return http.post('nota/json?save='+salva, nota)
		} else {
			return http.post('nota/json?save='+salva, nota)
		}
	},
	getEstado(estado) {
		let estados = [
			"AC",
			"AL",
			"AM",
			"AP",
			"BA",
			"CE",
			"DF",
			"ES",
			"GO",
			"MA",
			"MT",
			"MS",
			"MG",
			"PA",
			"PB",
			"PR",
			"PE",
			"PI",
			"RJ",
			"RN",
			"RO",
			"RS",
			"RR",
			"SC",
			"SE",
			"SP",
			"TO"
		]

		return estados[estado]
	},
	getEstadoByUf(estado) {
		let estados = [
			"AC",
			"AL",
			"AM",
			"AP",
			"BA",
			"CE",
			"DF",
			"ES",
			"GO",
			"MA",
			"MT",
			"MS",
			"MG",
			"PA",
			"PB",
			"PR",
			"PE",
			"PI",
			"RJ",
			"RN",
			"RO",
			"RS",
			"RR",
			"SC",
			"SE",
			"SP",
			"TO"
		]

		return estados.find(e => e === estado)
	},
	getEstadoNumber(estado) {
		let estados = [
			"AC",
			"AL",
			"AM",
			"AP",
			"BA",
			"CE",
			"DF",
			"ES",
			"GO",
			"MA",
			"MT",
			"MS",
			"MG",
			"PA",
			"PB",
			"PR",
			"PE",
			"PI",
			"RJ",
			"RN",
			"RO",
			"RS",
			"RR",
			"SC",
			"SE",
			"SP",
			"TO"
		]

		return estados.indexOf(estado)
	},
    getUcomEnum(ucom) {
      switch(ucom) {
      	case 0:
      	case 1:
			return 'UN'

		case 2:
    	    return 'CX'

	    case 6:
	        return 'FD'

        case 3:
    	    return 'KG'

		case 4:
	        return 'PC'

          case 5:
	        return 'M'

        default:
          return "UN";
      }
    },
    getPagNome(codigo) {
    	let pags = [
    		{
				tPag: 1,
				xPag: "Dinheiro",
    		},
    		{
				tPag: 2,
				xPag: "Cheque",
    		},
    		{
				tPag: 3,
				xPag: "Cartão de Débito",
    		},
    		{
				tPag: 4,
				xPag: "Cartão de Crédito",
    		},
    		{
				tPag: 10,
				xPag: "Vale Alimentação",
    		},
    		{
				tPag: 11,
				xPag: "Vale Refeição",
    		},
    		{
				tPag: 12,
				xPag: "Vale Presente",
    		},
    		{
				tPag: 13,
				xPag: "Vale Combustível",
    		},
    		{
				tPag: 15,
				xPag: "Boleto Bancário",
    		},
    		{
				tPag: 90,
				xPag: "Sem Pagamento",
    		},
    		{
				tPag: 99,
				xPag: "Outros",
    		},
		]

		return pags.find(obj => {
			return obj.tPag == codigo
		}).xPag
	},
	autorizar(obj){
		return http.put('nota/json/' + obj.id, obj)

	},
	getNota(obj){
		return http.get('nota/' + obj.id)
	},
	convertApiToLocal(original_object) {
		let obj = {
			transp: {}
		};

		obj.destinatario = {
			"nome_fantasia": original_object.destinatario.xnome,
			"nome_razao": '',
			"cpf_cnpj": original_object.destinatario.cpf ? original_object.destinatario.cpf : original_object.destinatario.cnpj,
			"rg_ie": null,
			"data_nascimento": null,
			"endereco": original_object.destinatario.xlgr,
			"numero": original_object.destinatario.nro,
			"complemento": null,
			"bairro": original_object.destinatario.xbairro,
			"cidade": original_object.destinatario.xmun,
			"codigo_cidade": original_object.destinatario.cmun,
			"estado": this.getEstadoByUf(original_object.destinatario.uf),
			"cep": original_object.destinatario.cep,
			"telefone": original_object.destinatario.fone,
			"email": original_object.destinatario.email,
		}

		let nota = {
			"codigo": null,
			"natOp": original_object.natOp,
			"tipoDest": original_object.destinatario.cpf ? 'C' : 'F',
			"produtos": [{
				"franchise_id": 0,
				"idi": 45,
				"codigo": 1934,
				"descricao": "Refrigerante Lata",
				"atalho": 1,
				"tipo_produto": 0,
				"tipo_sped": 0,
				"unidade": 0,
				"categoria_id": 14,
				"fornecedor": 0,
				"referencia": null,
				"ncm_sh": "22021000",
				"estoque_atual": 120,
				"estoque_maximo": 0,
				"estoque_minimo": 0,
				"valor_custo": 0,
				"lucro": 0,
				"valor_venda": 4.5,
				"valor_atacado": 0,
				"quantidade_atacado": 0,
				"ranking": 190,
				"complemento": 0,
				"url_imagem": "<https://raw.githubusercontent.com/vcslima/banco_de_imagens/master/refrigerante_lata.png>",
				"p_bc_icms": 100,
				"p_icms": 10,
				"cfop": 5102,
				"cst": 102,
				"cest": null,
				"data_inc": null,
				"usuario_inc": null,
				"data_alt": "2020-04-07 10:48:48",
				"usuario_alt": null,
				"data_del": null,
				"usuario_del": 0,
				"composicoes": [],
				"label": "Refrigerante Lata",
				"quantidade": "8",
				"icms_calculado": 0,
				"icms_st_calculado": 0
			}, {
				"franchise_id": 0,
				"idi": 45,
				"codigo": 1937,
				"descricao": "Heineken Lata",
				"atalho": 1,
				"tipo_produto": 0,
				"tipo_sped": 0,
				"unidade": 0,
				"categoria_id": 10,
				"fornecedor": 0,
				"referencia": null,
				"ncm_sh": "22021000",
				"estoque_atual": -100,
				"estoque_maximo": 0,
				"estoque_minimo": 0,
				"valor_custo": 0,
				"lucro": 0,
				"valor_venda": 5,
				"valor_atacado": 0,
				"quantidade_atacado": 0,
				"ranking": 82,
				"complemento": 0,
				"url_imagem": "<https://raw.githubusercontent.com/vcslima/banco_de_imagens/master/cerveja_lata_heinenken.jpg>",
				"p_bc_icms": 100,
				"p_icms": 10,
				"cfop": 5102,
				"cst": 102,
				"cest": null,
				"data_inc": null,
				"usuario_inc": null,
				"data_alt": "2020-03-17 08:43:48",
				"usuario_alt": null,
				"data_del": null,
				"usuario_del": 0,
				"composicoes": [],
				"label": "Heineken Lata",
				"quantidade": "12"
			}],
			"estoque": false,
			"finNFe": 1,
			"tpNF": 1,
			"modFrete": 9,
			"infCpl": "",
			"valorNota": 96,
			"valorDesconto": 0,
			"valorDespesa": 0,
			"paymentMethod": "2",
			"doc_referencia": "",
			transp: {}
		};
		return nota;
	},
	imprimir(obj){
		return http.get('fiscal/danfe/' + obj.id, { responseType: 'blob' })
	},

	enviarEmail(obj, email){
		return http.get('fiscal/danfe/' + obj.id + "?email=" + email, { responseType: 'blob' })
	},

  loadCartasCorrecao(params = '') {
    return http.get('cce' + params)
  },
  imprimirCartaCorrecao(obj){
    return http.get('fiscal/danfe/cce/' + obj.id, { responseType: 'blob' })
  },
  createCartaCorrecao(carta) {
    return http.post('cce/json', carta );
  },
  loadNotifications(data) {
    let url = process.env.VUE_APP_QUARKUS_FISCAL_URL + '/fiscal/notifications'
    return httpNode.get(url, data)
	},

}