fiscal-core 0.7.3

Core types, tax calculations, and XML builder for Brazilian fiscal documents
Documentation
//! TXT layout structure definitions for each NF-e version.

use std::collections::HashMap;

// ── TXT Structure Definitions ───────────────────────────────────────────────

macro_rules! structure {
    ($($key:expr => $val:expr),* $(,)?) => {{
        let mut map = HashMap::new();
        $(map.insert($key, $val);)*
        map
    }};
}

pub(super) fn structure_310() -> HashMap<&'static str, &'static str> {
    structure! {
        "NOTAFISCAL" => "NOTAFISCAL|1|",
        "A" => "A|versao|Id|pk_nItem|",
        "B" => "B|cUF|cNF|natOp|indPag|mod|serie|nNF|dhEmi|dhSaiEnt|tpNF|idDest|cMunFG|tpImp|tpEmis|cDV|tpAmb|finNFe|indFinal|indPres|procEmi|verProc|dhCont|xJust|",
        "BA" => "BA|",
        "BA02" => "BA02|refNFe|",
        "C" => "C|xNome|xFant|IE|IEST|IM|CNAE|CRT|",
        "C02" => "C02|CNPJ|",
        "C02A" => "C02a|cpf|",
        "C05" => "C05|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|",
        "E" => "E|xNome|indIEDest|IE|ISUF|IM|email|",
        "E02" => "E02|CNPJ|",
        "E03" => "E03|CPF|",
        "E03A" => "E03a|idEstrangeiro|",
        "E05" => "E05|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|",
        "H" => "H|item|infAdProd|",
        "I" => "I|cProd|cEAN|xProd|NCM|EXTIPI|CFOP|uCom|qCom|vUnCom|vProd|cEANTrib|uTrib|qTrib|vUnTrib|vFrete|vSeg|vDesc|vOutro|indTot|xPed|nItemPed|nFCI|",
        "I05C" => "I05C|CEST|",
        "M" => "M|vTotTrib|",
        "N" => "N|",
        "N02" => "N02|orig|CST|modBC|vBC|pICMS|vICMS|",
        "N03" => "N03|orig|CST|modBC|vBC|pICMS|vICMS|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|",
        "N04" => "N04|orig|CST|modBC|pRedBC|vBC|pICMS|vICMS|vICMSDeson|motDesICMS|",
        "N05" => "N05|orig|CST|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vICMSDeson|motDesICMS|",
        "N06" => "N06|orig|CST|vICMSDeson|motDesICMS|",
        "N07" => "N07|orig|CST|modBC|pRedBC|vBC|pICMS|vICMSOp|pDif|vICMSDif|vICMS|",
        "N08" => "N08|orig|CST|vBCSTRet|vICMSSTRet|",
        "N09" => "N09|orig|CST|modBC|pRedBC|vBC|pICMS|vICMS|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vICMSDeson|motDesICMS|",
        "N10" => "N10|orig|CST|modBC|vBC|pRedBC|pICMS|vICMS|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vICMSDeson|motDesICMS|",
        "O" => "O|clEnq|CNPJProd|cSelo|qSelo|cEnq|",
        "O07" => "O07|CST|vIPI|",
        "O08" => "O08|CST|",
        "O10" => "O10|vBC|pIPI|",
        "Q" => "Q|",
        "Q02" => "Q02|CST|vBC|pPIS|vPIS|",
        "Q04" => "Q04|CST|",
        "S" => "S|",
        "S02" => "S02|CST|vBC|pCOFINS|vCOFINS|",
        "S04" => "S04|CST|",
        "W" => "W|",
        "W02" => "W02|vBC|vICMS|vICMSDeson|vBCST|vST|vProd|vFrete|vSeg|vDesc|vII|vIPI|vPIS|vCOFINS|vOutro|vNF|vTotTrib|",
        "X" => "X|modFrete|",
        "X03" => "X03|xNome|IE|xEnder|xMun|UF|",
        "X04" => "X04|CNPJ|",
        "X05" => "X05|CPF|",
        "X26" => "X26|qVol|esp|marca|nVol|pesoL|pesoB|",
        "Y" => "Y|",
        "Y02" => "Y02|nFat|vOrig|vDesc|vLiq|",
        "Y07" => "Y07|nDup|dVenc|vDup|",
        "YA" => "YA|tPag|vPag|CNPJ|tBand|cAut|tpIntegra|",
        "Z" => "Z|infAdFisco|infCpl|"
    }
}

pub(super) fn structure_400() -> HashMap<&'static str, &'static str> {
    structure! {
        "NOTAFISCAL" => "NOTAFISCAL|qtd|",
        "A" => "A|versao|Id|pk_nItem|",
        "B" => "B|cUF|cNF|natOp|mod|serie|nNF|dhEmi|dhSaiEnt|tpNF|idDest|cMunFG|cMunFGIBS|tpImp|tpEmis|cDV|tpAmb|finNFe|indFinal|indPres|indIntermed|procEmi|verProc|dhCont|xJust|",
        "B31" => "B31|tpEnteGov|pRedutor|tpOperGov|",
        "BA" => "BA|",
        "BA02" => "BA02|refNFe|",
        "BA03" => "BA03|cUF|AAMM|CNPJ|mod|serie|nNF|",
        "BA10" => "BA10|cUF|AAMM|IE|mod|serie|nNF|",
        "BA13" => "BA13|CNPJ|",
        "BA14" => "BA14|CPF|",
        "BA19" => "B19|refCTe|",
        "BA20" => "BA20|mod|nECF|nCOO|",
        "BB" => "BB|",
        "BB02" => "BB02|refNFe|",
        "C" => "C|xNome|xFant|IE|IEST|IM|CNAE|CRT|",
        "C02" => "C02|CNPJ|",
        "C02A" => "C02a|CPF|",
        "C05" => "C05|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|",
        "D" => "D|CNPJ|xOrgao|matr|xAgente|fone|UF|nDAR|dEmi|vDAR|repEmi|dPag|",
        "E" => "E|xNome|indIEDest|IE|ISUF|IM|email|",
        "E02" => "E02|CNPJ|",
        "E03" => "E03|CPF|",
        "E03A" => "E03a|idEstrangeiro|",
        "E05" => "E05|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|",
        "F" => "F|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|email|IE|",
        "F02" => "F02|CNPJ|",
        "F02A" => "F02a|CPF|",
        "F02B" => "F02b|xNome|",
        "G" => "G|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|email|IE|",
        "G02" => "G02|CNPJ|",
        "G02A" => "G02a|CPF|",
        "G02B" => "G02b|xNome|",
        "GA" => "GA|",
        "GA02" => "GA02|CNPJ|",
        "GA03" => "GA03|CPF|",
        "H" => "H|item|infAdProd|",
        "I" => "I|cProd|cEAN|xProd|NCM|cBenef|EXTIPI|CFOP|uCom|qCom|vUnCom|vProd|cEANTrib|uTrib|qTrib|vUnTrib|vFrete|vSeg|vDesc|vOutro|indTot|xPed|nItemPed|nFCI|indBemMovelUsado|",
        "I05A" => "I05A|NVE|",
        "I05C" => "I05C|CEST|indEscala|CNPJFab|",
        "I05G" => "I05C|cCredPresumido|pCredPresumido|vCredPresumido|",
        "I18" => "I18|nDI|dDI|xLocDesemb|UFDesemb|dDesemb|tpViaTransp|vAFRMM|tpIntermedio|CNPJ|UFTerceiro|cExportador|",
        "I25" => "I25|nAdicao|nSeqAdic|cFabricante|vDescDI|nDraw|",
        "I50" => "I50|nDraw|",
        "I52" => "I52|nRE|chNFe|qExport|",
        "I80" => "I80|nLote|qLote|dFab|dVal|cAgreg|",
        "JA" => "JA|tpOp|chassi|cCor|xCor|pot|cilin|pesoL|pesoB|nSerie|tpComb|nMotor|CMT|dist|anoMod|anoFab|tpPint|tpVeic|espVeic|VIN|condVeic|cMod|cCorDENATRAN|lota|tpRest|",
        "K" => "K|cProdANVISA|vPMC|xMotivoIsencao|",
        "L" => "L|tpArma|nSerie|nCano|descr|",
        "LA" => "LA|cProdANP|descANP|pGLP|pGNn|pGNi|vPart|CODIF|qTemp|UFCons|",
        "LA07" => "LA07|qBCProd|vAliqProd|vCIDE|",
        "LA11" => "LA11|nBico|nBomba|nTanque|vEncIni|vEncFin|",
        "LB" => "LB|nRECOPI|",
        "M" => "M|vTotTrib|",
        "N" => "N|",
        "N02" => "N02|orig|CST|modBC|vBC|pICMS|vICMS|pFCP|vFCP|",
        "N03" => "N03|orig|CST|modBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|",
        "N04" => "N04|orig|CST|modBC|pRedBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|vICMSDeson|motDesICMS|",
        "N05" => "N05|orig|CST|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "N06" => "N06|orig|CST|vICMSDeson|motDesICMS|indDeduzDeson|",
        "N07" => "N07|orig|CST|modBC|pRedBC|vBC|pICMS|vICMSOp|pDif|vICMSDif|vICMS|vBCFCP|pFCP|vFCP|",
        "N08" => "N08|orig|CST|vBCSTRet|pST|vICMSSTRet|vBCFCPSTRet|pFCPSTRet|vFCPSTRet|pRedBCEfet|vBCEfet|pICMSEfet|vICMSEfet|vICMSSubstituto|",
        "N09" => "N09|orig|CST|modBC|pRedBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "N10" => "N10|orig|CST|modBC|vBC|pRedBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "N10A" => "N10a|orig|CST|modBC|vBC|pRedBC|pICMS|vICMS|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|pBCOp|UFST|",
        "N10B" => "N10b|orig|CST|vBCSTRet|vICMSSTRet|vBCSTDest|vICMSSTDest|vBCFCPSTRet|pFCPSTRet|vFCPSTRet|pST|vICMSSubstituto|pRedBCEfet|vBCEfet|pICMSEfet|vICMSEfet|",
        "N10C" => "N10c|orig|CSOSN|pCredSN|vCredICMSSN|",
        "N10D" => "N10d|orig|CSOSN|",
        "N10E" => "N10e|orig|CSOSN|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|pCredSN|vCredICMSSN|",
        "N10F" => "N10f|orig|CSOSN|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|",
        "N10G" => "N10g|orig|CSOSN|vBCSTRet|pST|vICMSSTRet|vBCFCPSTRet|pFCPSTRet|vFCPSTRet|pRedBCEfet|vBCEfet|pICMSEfet|vICMSEfet|vICMSSubstituto|",
        "N10H" => "N10h|orig|CSOSN|modBC|vBC|pRedBC|pICMS|vICMS|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|pCredSN|vCredICMSSN|",
        "NA" => "NA|vBCUFDest|vBCFCPUFDest|pFCPUFDest|pICMSUFDest|pICMSInter|pICMSInterPart|vFCPUFDest|vICMSUFDest|vICMSUFRemet|",
        "O" => "O|CNPJProd|cSelo|qSelo|cEnq|",
        "O07" => "O07|CST|vIPI|",
        "O08" => "O08|CST|",
        "O10" => "O10|vBC|pIPI|",
        "O11" => "O11|qUnid|vUnid|",
        "P" => "P|vBC|vDespAdu|vII|vIOF|",
        "Q" => "Q|",
        "Q02" => "Q02|CST|vBC|pPIS|vPIS|",
        "Q03" => "Q03|CST|qBCProd|vAliqProd|vPIS|",
        "Q04" => "Q04|CST|",
        "Q05" => "Q05|CST|vPIS|",
        "Q07" => "Q07|vBC|pPIS|",
        "Q10" => "Q10|qBCProd|vAliqProd|",
        "R" => "R|vPIS|",
        "R02" => "R02|vBC|pPIS|",
        "R04" => "R04|qBCProd|vAliqProd|vPIS|",
        "S" => "S|",
        "S02" => "S02|CST|vBC|pCOFINS|vCOFINS|",
        "S03" => "S03|CST|qBCProd|vAliqProd|vCOFINS|",
        "S04" => "S04|CST|",
        "S05" => "S05|CST|vCOFINS|",
        "S07" => "S07|vBC|pCOFINS|",
        "S09" => "S09|qBCProd|vAliqProd|",
        "T" => "T|vCOFINS|",
        "T02" => "T02|vBC|pCOFINS|",
        "T04" => "T04|qBCProd|vAliqProd|",
        "U" => "U|vBC|vAliq|vISSQN|cMunFG|cListServ|vDeducao|vOutro|vDescIncond|vDescCond|vISSRet|indISS|cServico|cMun|cPais|nProcesso|indIncentivo|",
        "UA" => "UA|pDevol|vIPIDevol|",
        "UB" => "UB|",
        "UB01" => "UB01|CSTIS|cClassTribIS|vBCIS|pIS|pISEspec|uTrib|qTrib|vIS|",
        "UB12" => "UB12|CST|cClassTrib|vBC|pIBSUF|vIBSUF|pIBSMun|vIBSMun|pCBS|vCBS|vIBS|",
        "UB73" => "UB73|cCredPres|pCredPres|vCredPres|vCredPresCondSus|",
        "UB78" => "UB78|cCredPres|pCredPres|vCredPres|vCredPresCondSus|",
        "W" => "W|",
        "W02" => "W02|vBC|vICMS|vICMSDeson|vFCP|vBCST|vST|vFCPST|vFCPSTRet|vProd|vFrete|vSeg|vDesc|vII|vIPI|vIPIDevol|vPIS|vCOFINS|vOutro|vNF|vTotTrib|vFCPUFDest|vICMSUFDest|vICMSUFRemet|",
        "W03" => "W03|vIBS|vCBS|vIS|vBCIBSCBS|gIBS_vIBS|gIBS_vCredPres|gIBS_vCredPresCondSus|gIBSUF_vDif|gIBSUF_vDevTrib|gIBSUF_vIBSUF|gIBSMun_vDif|gIBSMun_vDevTrib|gIBSMun_vIBSMun|gCBS_vDif|gCBS_vDevTrib|gCBS_vCBS|gCBS_vCredPres|gCBS_vCredPresCondSus|gMono_vIBSMono|gMono_vCBSMono|gMono_vIBSMonoReten|gMono_vCBSMonoReten|gMono_vIBSMonoRet|gMono_vCBSMonoRet|",
        "W17" => "W17|vServ|vBC|vISS|vPIS|vCOFINS|dCompet|vDeducao|vOutro|vDescIncond|vDescCond|vISSRet|cRegTrib|",
        "W23" => "W23|vRetPIS|vRetCOFINS|vRetCSLL|vBCIRRF|vIRRF|vBCRetPrev|vRetPrev|",
        "X" => "X|modFrete|",
        "X03" => "X03|xNome|IE|xEnder|xMun|UF|",
        "X04" => "X04|CNPJ|",
        "X05" => "X05|CPF|",
        "X11" => "X11|vServ|vBCRet|pICMSRet|vICMSRet|CFOP|cMunFG|",
        "X18" => "X18|placa|UF|RNTC|",
        "X22" => "X22|placa|UF|RNTC|",
        "X25A" => "X25a|vagao|",
        "X25B" => "X25b|balsa|",
        "X26" => "X26|qVol|esp|marca|nVol|pesoL|pesoB|",
        "X33" => "X33|nLacre|",
        "Y" => "Y|vTroco|",
        "Y02" => "Y02|nFat|vOrig|vDesc|vLiq|",
        "Y07" => "Y07|nDup|dVenc|vDup|",
        "YA" => "YA|indPag|tPag|vPag|CNPJ|tBand|cAut|tpIntegra|xPag|",
        "YB" => "YB|CNPJ|idCadIntTran|",
        "Z" => "Z|infAdFisco|infCpl|",
        "Z04" => "Z04|xCampo|xTexto|",
        "Z07" => "Z07|xCampo|xTexto|",
        "Z10" => "Z10|nProc|indProc|",
        "ZA" => "ZA|UFSaidaPais|xLocExporta|xLocDespacho|",
        "ZB" => "ZB|xNEmp|xPed|xCont|",
        "ZC" => "ZC|safra|ref|qTotMes|qTotAnt|qTotGer|vFor|vTotDed|vLiqFor|",
        "ZC04" => "ZC04|dia|qtde|",
        "ZC10" => "ZC10|xDed|vDed|",
        "ZD" => "ZD|CNPJ|xContato|email|fone|CSRT|idCSRT|",
        "ZX01" => "ZX01|qrcode|urlChave|"
    }
}

pub(super) fn structure_400_v12() -> HashMap<&'static str, &'static str> {
    structure! {
        "NOTAFISCAL" => "NOTAFISCAL|qtd|",
        "A" => "A|versao|Id|pk_nItem|",
        "B" => "B|cUF|cNF|natOp|mod|serie|nNF|dhEmi|dhSaiEnt|tpNF|idDest|cMunFG|tpImp|tpEmis|cDV|tpAmb|finNFe|indFinal|indPres|indIntermed|procEmi|verProc|dhCont|xJust|",
        "BA" => "BA|",
        "BA02" => "BA02|refNFe|",
        "C" => "C|xNome|xFant|IE|IEST|IM|CNAE|CRT|",
        "C02" => "C02|CNPJ|",
        "C02A" => "C02a|CPF|",
        "C05" => "C05|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|",
        "D" => "D|CNPJ|xOrgao|matr|xAgente|fone|UF|nDAR|dEmi|vDAR|repEmi|dPag|",
        "E" => "E|xNome|indIEDest|IE|ISUF|IM|email|",
        "E02" => "E02|CNPJ|",
        "E03" => "E03|CPF|",
        "E03A" => "E03a|idEstrangeiro|",
        "E05" => "E05|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|",
        "F" => "F|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|email|IE|",
        "F02" => "F02|CNPJ|",
        "F02A" => "F02a|CPF|",
        "F02B" => "F02b|xNome|",
        "G" => "G|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|email|IE|",
        "G02" => "G02|CNPJ|",
        "G02A" => "G02a|CPF|",
        "G02B" => "G02b|xNome|",
        "GA" => "GA|",
        "GA02" => "GA02|CNPJ|",
        "GA03" => "GA03|CPF|",
        "H" => "H|item|infAdProd|",
        "I" => "I|cProd|cEAN|xProd|NCM|cBenef|EXTIPI|CFOP|uCom|qCom|vUnCom|vProd|cEANTrib|uTrib|qTrib|vUnTrib|vFrete|vSeg|vDesc|vOutro|indTot|xPed|nItemPed|nFCI|",
        "I05A" => "I05A|NVE|",
        "I05C" => "I05C|CEST|indEscala|CNPJFab|",
        "I05G" => "I05C|cCredPresumido|pCredPresumido|vCredPresumido|",
        "I18" => "I18|nDI|dDI|xLocDesemb|UFDesemb|dDesemb|tpViaTransp|vAFRMM|tpIntermedio|CNPJ|UFTerceiro|cExportador|",
        "I25" => "I25|nAdicao|nSeqAdic|cFabricante|vDescDI|nDraw|",
        "I50" => "I50|nDraw|",
        "I52" => "I52|nRE|chNFe|qExport|",
        "I80" => "I80|nLote|qLote|dFab|dVal|cAgreg|",
        "JA" => "JA|tpOp|chassi|cCor|xCor|pot|cilin|pesoL|pesoB|nSerie|tpComb|nMotor|CMT|dist|anoMod|anoFab|tpPint|tpVeic|espVeic|VIN|condVeic|cMod|cCorDENATRAN|lota|tpRest|",
        "K" => "K|cProdANVISA|vPMC|xMotivoIsencao|",
        "L" => "L|tpArma|nSerie|nCano|descr|",
        "LA" => "LA|cProdANP|descANP|pGLP|pGNn|pGNi|vPart|CODIF|qTemp|UFCons|",
        "LB" => "LB|nRECOPI|",
        "M" => "M|vTotTrib|",
        "N" => "N|",
        "N02" => "N02|orig|CST|modBC|vBC|pICMS|vICMS|pFCP|vFCP|",
        "N03" => "N03|orig|CST|modBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|",
        "N04" => "N04|orig|CST|modBC|pRedBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|vICMSDeson|motDesICMS|",
        "N05" => "N05|orig|CST|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "N06" => "N06|orig|CST|vICMSDeson|motDesICMS|indDeduzDeson|",
        "N07" => "N07|orig|CST|modBC|pRedBC|vBC|pICMS|vICMSOp|pDif|vICMSDif|vICMS|vBCFCP|pFCP|vFCP|",
        "N08" => "N08|orig|CST|vBCSTRet|pST|vICMSSTRet|vBCFCPSTRet|pFCPSTRet|vFCPSTRet|pRedBCEfet|vBCEfet|pICMSEfet|vICMSEfet|vICMSSubstituto|",
        "N09" => "N09|orig|CST|modBC|pRedBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "N10" => "N10|orig|CST|modBC|vBC|pRedBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "N10A" => "N10a|orig|CST|modBC|vBC|pRedBC|pICMS|vICMS|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|pBCOp|UFST|",
        "N10B" => "N10b|orig|CST|vBCSTRet|vICMSSTRet|vBCSTDest|vICMSSTDest|vBCFCPSTRet|pFCPSTRet|vFCPSTRet|pST|vICMSSubstituto|pRedBCEfet|vBCEfet|pICMSEfet|vICMSEfet|",
        "N10C" => "N10c|orig|CSOSN|pCredSN|vCredICMSSN|",
        "N10D" => "N10d|orig|CSOSN|",
        "N10E" => "N10e|orig|CSOSN|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|pCredSN|vCredICMSSN|",
        "N10F" => "N10f|orig|CSOSN|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|",
        "N10G" => "N10g|orig|CSOSN|vBCSTRet|pST|vICMSSTRet|vBCFCPSTRet|pFCPSTRet|vFCPSTRet|pRedBCEfet|vBCEfet|pICMSEfet|vICMSEfet|vICMSSubstituto|",
        "N10H" => "N10h|orig|CSOSN|modBC|vBC|pRedBC|pICMS|vICMS|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|pCredSN|vCredICMSSN|",
        "NA" => "NA|vBCUFDest|vBCFCPUFDest|pFCPUFDest|pICMSUFDest|pICMSInter|pICMSInterPart|vFCPUFDest|vICMSUFDest|vICMSUFRemet|",
        "O" => "O|CNPJProd|cSelo|qSelo|cEnq|",
        "O07" => "O07|CST|vIPI|",
        "O08" => "O08|CST|",
        "O10" => "O10|vBC|pIPI|",
        "O11" => "O11|qUnid|vUnid|",
        "P" => "P|vBC|vDespAdu|vII|vIOF|",
        "Q" => "Q|",
        "Q02" => "Q02|CST|vBC|pPIS|vPIS|",
        "Q03" => "Q03|CST|qBCProd|vAliqProd|vPIS|",
        "Q04" => "Q04|CST|",
        "Q05" => "Q05|CST|vPIS|",
        "R" => "R|vPIS|",
        "S" => "S|",
        "S02" => "S02|CST|vBC|pCOFINS|vCOFINS|",
        "S03" => "S03|CST|qBCProd|vAliqProd|vCOFINS|",
        "S04" => "S04|CST|",
        "S05" => "S05|CST|vCOFINS|",
        "T" => "T|vCOFINS|",
        "U" => "U|vBC|vAliq|vISSQN|cMunFG|cListServ|vDeducao|vOutro|vDescIncond|vDescCond|vISSRet|indISS|cServico|cMun|cPais|nProcesso|indIncentivo|",
        "UA" => "UA|pDevol|vIPIDevol|",
        "W" => "W|",
        "W02" => "W02|vBC|vICMS|vICMSDeson|vFCP|vBCST|vST|vFCPST|vFCPSTRet|vProd|vFrete|vSeg|vDesc|vII|vIPI|vIPIDevol|vPIS|vCOFINS|vOutro|vNF|vTotTrib|vFCPUFDest|vICMSUFDest|vICMSUFRemet|",
        "W17" => "W17|vServ|vBC|vISS|vPIS|vCOFINS|dCompet|vDeducao|vOutro|vDescIncond|vDescCond|vISSRet|cRegTrib|",
        "W23" => "W23|vRetPIS|vRetCOFINS|vRetCSLL|vBCIRRF|vIRRF|vBCRetPrev|vRetPrev|",
        "X" => "X|modFrete|",
        "X03" => "X03|xNome|IE|xEnder|xMun|UF|",
        "X04" => "X04|CNPJ|",
        "X05" => "X05|CPF|",
        "X11" => "X11|vServ|vBCRet|pICMSRet|vICMSRet|CFOP|cMunFG|",
        "X18" => "X18|placa|UF|RNTC|",
        "X22" => "X22|placa|UF|RNTC|",
        "X26" => "X26|qVol|esp|marca|nVol|pesoL|pesoB|",
        "X33" => "X33|nLacre|",
        "Y" => "Y|vTroco|",
        "Y02" => "Y02|nFat|vOrig|vDesc|vLiq|",
        "Y07" => "Y07|nDup|dVenc|vDup|",
        "YA" => "YA|indPag|tPag|vPag|CNPJ|tBand|cAut|tpIntegra|xPag|",
        "YB" => "YB|CNPJ|idCadIntTran|",
        "Z" => "Z|infAdFisco|infCpl|",
        "Z04" => "Z04|xCampo|xTexto|",
        "Z07" => "Z07|xCampo|xTexto|",
        "Z10" => "Z10|nProc|indProc|",
        "ZA" => "ZA|UFSaidaPais|xLocExporta|xLocDespacho|",
        "ZD" => "ZD|CNPJ|xContato|email|fone|CSRT|idCSRT|",
        "ZX01" => "ZX01|qrcode|urlChave|"
    }
}

pub(super) fn structure_400_v13() -> HashMap<&'static str, &'static str> {
    // v1.3 is a superset of v1.2 with extra fields in B and I
    let mut m = structure_400_v12();
    m.insert("B", "B|cUF|cNF|natOp|mod|serie|nNF|dhEmi|dhSaiEnt|tpNF|idDest|cMunFG|tpImp|tpEmis|cDV|tpAmb|finNFe|indFinal|indPres|indIntermed|procEmi|verProc|dhCont|xJust|indPag|dPrevEntrega|tpNFDebito|tpNFCredito|cMunFGIBS|");
    m.insert("B31", "B31|tpEnteGov|pRedutor|tpOperGov|");
    m.insert("BB01", "BB01|refNFe|");
    m.insert("I", "I|cProd|cEAN|xProd|NCM|cBenef|EXTIPI|CFOP|uCom|qCom|vUnCom|vProd|cEANTrib|uTrib|qTrib|vUnTrib|vFrete|vSeg|vDesc|vOutro|indTot|xPed|nItemPed|nFCI|vItem|tpCredPresIBSZFM|indBemMovelUsado|");
    m
}

pub(super) fn structure_400_sebrae() -> HashMap<&'static str, &'static str> {
    structure! {
        "NOTAFISCAL" => "NOTAFISCAL|qtd|",
        "A" => "A|versao|Id|",
        "B" => "B|cUF|cNF|natOp|mod|serie|nNF|dhEmi|dhSaiEnt|tpNF|idDest|cMunFG|tpImp|tpEmis|cDV|tpAmb|finNFe|indFinal|indPres|indIntermed|procEmi|verProc|dhCont|xJust|",
        "BA" => "BA|",
        "BA02" => "BA02|refNFe|",
        "C" => "C|xNome|xFant|IE|IEST|IM|CNAE|CRT|",
        "C02" => "C02|CNPJ|",
        "C02A" => "C02a|CPF|",
        "C05" => "C05|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|",
        "D" => "D|CNPJ|xOrgao|matr|xAgente|fone|UF|nDAR|dEmi|vDAR|repEmi|dPag|",
        "E" => "E|xNome|indIEDest|IE|ISUF|IM|email|",
        "E02" => "E02|CNPJ|",
        "E03" => "E03|CPF|",
        "E03A" => "E03a|idEstrangeiro|",
        "E05" => "E05|xLgr|nro|xCpl|xBairro|cMun|xMun|UF|CEP|cPais|xPais|fone|",
        "H" => "H|item|infAdProd|",
        "I" => "I|cProd|cEAN|xProd|NCM|EXTIPI|CFOP|uCom|qCom|vUnCom|vProd|cEANTrib|uTrib|qTrib|vUnTrib|vFrete|vSeg|vDesc|vOutro|indTot|xPed|nItemPed|nFCI|",
        "I05C" => "I05C|CEST|indEscala|CNPJFab|cBenef|",
        "I80" => "I80|nLote|qLote|dFab|dVal|cAgreg|",
        "M" => "M|vTotTrib|",
        "N" => "N|",
        "N02" => "N02|orig|CST|modBC|vBC|pICMS|vICMS|pFCP|vFCP|",
        "N03" => "N03|orig|CST|modBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|",
        "N04" => "N04|orig|CST|modBC|pRedBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|vICMSDeson|motDesICMS|",
        "N05" => "N05|orig|CST|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "N06" => "N06|orig|CST|vICMSDeson|motDesICMS|indDeduzDeson|",
        "N07" => "N07|orig|CST|modBC|pRedBC|vBC|pICMS|vICMSOp|pDif|vICMSDif|vICMS|vBCFCP|pFCP|vFCP|",
        "N08" => "N08|orig|CST|vBCSTRet|pST|vICMSSubstituto|vICMSSTRet|vBCFCPSTRet|pFCPSTRet|vFCPSTRet|pRedBCEfet|vBCEfet|pICMSEfet|vICMSEfet|",
        "N09" => "N09|orig|CST|modBC|pRedBC|vBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "N10" => "N10|orig|CST|modBC|vBC|pRedBC|pICMS|vICMS|vBCFCP|pFCP|vFCP|modBCST|pMVAST|pRedBCST|vBCST|pICMSST|vICMSST|vBCFCPST|pFCPST|vFCPST|vICMSDeson|motDesICMS|",
        "O" => "O|CNPJProd|cSelo|qSelo|cEnq|",
        "O07" => "O07|CST|vIPI|",
        "O08" => "O08|CST|",
        "O10" => "O10|vBC|pIPI|",
        "Q" => "Q|",
        "Q02" => "Q02|CST|vBC|pPIS|vPIS|",
        "Q04" => "Q04|CST|",
        "S" => "S|",
        "S02" => "S02|CST|vBC|pCOFINS|vCOFINS|",
        "S04" => "S04|CST|",
        "W" => "W|",
        "W02" => "W02|vBC|vICMS|vICMSDeson|vFCP|vBCST|vST|vFCPST|vFCPSTRet|vProd|vFrete|vSeg|vDesc|vII|vIPI|vIPIDevol|vPIS|vCOFINS|vOutro|vNF|vTotTrib|",
        "W04C" => "W04c|vFCPUFDest|",
        "W04E" => "W04e|vICMSUFDest|",
        "W04G" => "W04g|vICMSUFRemet|",
        "X" => "X|modFrete|",
        "X03" => "X03|xNome|IE|xEnder|xMun|UF|",
        "X04" => "X04|CNPJ|",
        "X05" => "X05|CPF|",
        "X26" => "X26|qVol|esp|marca|nVol|pesoL|pesoB|",
        "Y" => "Y|",
        "Y02" => "Y02|nFat|vOrig|vDesc|vLiq|",
        "Y07" => "Y07|nDup|dVenc|vDup|",
        "YA" => "YA|vTroco|",
        "YA01" => "YA01|indPag|tPag|vPag|",
        "YA04" => "YA04|tpIntegra|CNPJ|tBand|cAut|CNPJReceb|idTermPag|",
        "Z" => "Z|infAdFisco|infCpl|",
        "ZD" => "ZD|CNPJ|xContato|email|fone|CSRT|idCSRT|"
    }
}