def reciboNomina(tree): """ Regresa información básica de un recibo en cfdi. :param tree: generado por Xm.getXml :returns: lista con receptor (nombre y rfc), fecha timbrado, UUID, periodo, total percs, total deds, neto, diccionario de percepciones y diccionario de deducciones. """ rc = cfdiSimple(tree) stn = Xm.getElem(tree, "Nomina")[0] fechas = [ stn.attrib[k] for k in ["FechaPago", "FechaInicialPago", "FechaFinalPago"] ] percs = (float(Xm.leeAtributo(tree, "Percepciones", "TotalGravado")) + float(Xm.leeAtributo(tree, "Percepciones", "TotalExento"))) if Xm.leeAtributo(tree, "Deducciones", "TotalGravado"): deds = (float(Xm.leeAtributo(tree, "Deducciones", "TotalGravado")) + float(Xm.leeAtributo(tree, "Deducciones", "TotalExento"))) else: deds = 0.0 ps = Xm.getElem(tree, "Percepcion") ds = Xm.getElem(tree, "Deduccion") dPs = {x[0]: x[1:] for x in [mkPercDed(p) for p in ps]} dDs = {x[0]: x[1:] for x in [mkPercDed(d) for d in ds]} return [rc[6], rc[7], rc[0], rc[5], rc[3], rc[4]] + fechas \ + [percs, deds, dPs, dDs]
def getTrasladosDet(tree): imps = Xm.getElem(tree, "Impuestos")[0] # tras = Xm.getElem(tree, "Traslado") tras = Xm.getElem(imps, "Traslado") d = {} for t in tras: r = [t.attrib["impuesto"], t.attrib["tasa"], t.attrib["importe"]] if r[0] not in d.keys(): d[r[0]] = [] d[r[0]].append(r[1:]) return d
def getTasaIeps(tree): tras = Xm.getElem(tree, "Traslado") tasa = "0.00" for t in tras: if t.attrib.get("impuesto", " ") == "IEPS": tasa = t.attrib.get("tasa", "0.00") return tasa
def getTraslados(tree): tras = Xm.getElem(tree, "Traslado") d = {} for t in tras: if t.attrib["impuesto"] not in d.keys(): d[t.attrib["impuesto"]] = "0.0" d[t.attrib["impuesto"]] = str( float(d[t.attrib["impuesto"]]) + float(t.attrib["importe"])) return d
def getConceptos(tree): conc = Xm.getElem(tree, "Concepto") d = {} for c in conc: ki = c.attrib["descripcion"].strip() if ki in d.keys(): d[ki] = [d[ki]] d[ki].append(c.attrib["importe"]) else: d[ki] = c.attrib["importe"] return d
def getRetenciones(tree): rets = Xm.getElem(tree, "Retencion") d = {} for t in rets: d[t.attrib["impuesto"]] = t.attrib["importe"] return d
def readEmisor(tree): st = Xm.getElem(tree, "Emisor")[0] return [st.attrib.get("nombre", "Sin Nombre").strip(), st.attrib["rfc"]]
def readReceptor(tree): st = Xm.getElem(tree, "Receptor")[0] return [st.attrib.get("nombre", "").strip(), st.attrib["rfc"]]