def mkTotales(texto): """ Obtiene los totales de un archivo sua. :param texto: Línea de texto tipo 4 de un archivo sua. """ lns = (58, 9, 9, 9, 9, 9, 9, 9, 11, 9, 9, 9, 9, 11, 9, 9, 11, 9, 9, 9, 9, 9) l = Sp.splitLens(texto, lns) l = [l[0]] + [int(x) / 100.0 for x in l[1:]] mensual = Sp.list2dict( l, ("cf", "exc", "pd", "gmp", "rt", "iv", "gps", "subt", "act", "rec"), (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) mensual["total"] = sum(l[1:11]) - l[8] rcv = Sp.list2dict(l, ("retiro", "cyv", "subt", "act", "rec"), (11, 12, 13, 14, 15)) rcv["total"] = sum(l[14:16]) + rcv["subt"] infonavit = Sp.list2dict(l, ("sin", "con", "amort", "act", "rec"), (17, 18, 19, 20, 21)) infonavit["subt"] = sum(l[17:20]) infonavit["total"] = sum(l[17:22]) d = {} d["total"] = mensual["total"] + rcv["total"] + infonavit["total"] d["mensual"] = mensual d["rcv"] = rcv d["infonavit"] = infonavit return d
def mkHeader(texto): """ Separa una línea de texto en longitudes específicas. :param texto: Texto a procesar. Se llama con la primera línea (virtual) de un archivo sua. """ lns = (2, 11, 13, 4, 2, 6, 50, 102, 7, 50, 1, 13, 7) return Sp.splitLens(texto, lns)
def prsBteEnvioDet(txt): lens = (1, 10, 20, 20, 20, 5, 2, 19, 2, 24, 7, 2, 2, 2, 4, 40, 3, 2, 5, 12, 1, 8, 3, 1, 1, 3, 3, 2, 13, 18, 2, 1, 16, 4, 3, 2, 18, 4, 1, 15, 16, 10) rec = Sp.subLista(Sp.splitLens(txt, lens), (1, 2, 3, 4, 5, 28, 29, 32, 30)) rec[0] = str(int(rec[0])) rec[1:4] = list(map(lambda x: x.strip(), rec[1:4])) rec[4] = str(int(rec[4])) return rec
def prsBteRespDet(txt): lens = (1, 10, 20, 20, 20, 5, 13, 2, 1, 16, 4, 3, 2, 18, 4, 2, 8) rec = Sp.subLista(Sp.splitLens(txt, lens), (1, 2, 3, 4, 5, 6, 7, 9, 13, 15)) rec[0] = str(int(rec[0])) rec[1:4] = list(map(lambda x: x.strip(), rec[1:4])) rec[8] = rec[8][-10:] rec[4] = str(int(rec[4])) return rec
def mkMovs(datos): """ Procesa las línesa tipo 3 de un archivo sua. :param datos: Lista de líneas de texto. :returns: Lista de movimientos. La longitud de un campo de movimientos es 38. """ lnRec = 38 lns = (11, 2, 8, 8, 2, 7) mvs = [x[13:].strip() for x in datos] movs = [] for x in mvs: l = Sp.splitEqual(x, lnRec) movs += [Sp.splitLens(r, lns) for r in l] return movs
def mkCuotas(datos): """ Analiza las líneas de tipo 2 de un archivo sua. :param datos: Lista de líneas de texto. Se llama con las líneas virtuales del archivo sua que empiezan con "02. """ lns = (26, 4, 2, 11, 13, 18, 10, 8, 2, 50, 7, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7) l = [Sp.splitLens(x, lns) for x in datos] l = [mkCuotasTrab(x) for x in l] d = {} for x in l: d[x["afil"]] = x return d
def prsBteRespHdr(txt): return Sp.subLista(Sp.splitLens(txt, (1, 5, 40, 2, 6, 95)), (1, 2, 3, 4))
def prsBteEnvioHdr(txt): return Sp.subLista(Sp.splitLens(txt, (1, 2, 8, 5, 40, 2, 6)), (3, 4, 5, 6))