updated script, more work needed

This commit is contained in:
Erik Örtenberg 2025-11-24 00:23:39 +01:00
parent d9b391d66f
commit 502e9331e3

View File

@ -1,4 +1,15 @@
import csv import csv
import re
def float2(value, default=0.0):
if value is None:
return default
try:
return float(value)
except ValueError:
return default
print("Detta program rapporterar skillnader mellan verifikat som refererar till varandra genom beskrivningen av verifikatet. Den utgår från krediter och hittar matchande debeter") print("Detta program rapporterar skillnader mellan verifikat som refererar till varandra genom beskrivningen av verifikatet. Den utgår från krediter och hittar matchande debeter")
lines = [] lines = []
@ -29,41 +40,114 @@ with open("konto.csv", "w") as file:
krediter = {} krediter = {}
debeter = {} debeter = {}
verfs = {}
sums = {}
header = result.pop(0) header = result.pop(0)
for line in result: for line in result:
if not line['"Verifikation"']: if not line['"Verifikation"']:
continue continue
if line['"Kredit"'] and float(line['"Kredit"'].replace(",",".").replace(" ","")) > 0: verf = line['"Verifikation"'].replace(" ","")
krediter[line['"Verifikation"'].replace(" ","")] = line if verf not in verfs.keys():
elif line['"Debet"'] and float(line['"Debet"'].replace(",",".").replace(" ","")) > 0: verfs[verf] = line
debeter[line['"Verifikation"'].replace(" ","")] = line verfs[verf]['"Kredit"'] = float2(line['"Kredit"'].replace(",",".").replace(" ",""))
verfs[verf]['"Debet"'] = float2(line['"Debet"'].replace(",",".").replace(" ",""))
else:
verfs[verf]['"Kredit"'] += float2(line['"Kredit"'].replace(",",".").replace(" ",""))
verfs[verf]['"Debet"'] += float2(line['"Debet"'].replace(",",".").replace(" ",""))
## ELIMINATE CORRECTIONS
sums = {} verfs = dict(reversed(sorted(verfs.items(), key = lambda x: int(x[0][1:]))))
print(f"All verfs {len(verfs)}")
corrections = []
for verf, line in verfs.items():
if "Korrigering" in line['"Beskrivning"']:
corrections.append(verf)
toDelete = []
missingVerfs = []
for verf, line in verfs.items():
if verf in list(map(lambda x: x[0], toDelete)):
continue
if "Korrigering" in line['"Beskrivning"']:
toRemove = re.findall("(A\d+)(?:\D){0,1}",line['"Beskrivning"'])[0]
if toRemove not in verfs.keys():
missingVerfs.append(toRemove)
else:
targetSum = verfs[toRemove]['"Debet"'] - verfs[toRemove]['"Kredit"']
correctionSum = line['"Debet"'] - line['"Kredit"']
if abs(targetSum + correctionSum) < 0.0001:
#print(f"Deleting {verfs[toRemove]}")
#print(f"because of {line}")
#print("")
toDelete.append((toRemove, verf))
print(f"VARNING! {missingVerfs} saknas i verifikat listan men refereras till av korrektioner!")
print(f"Tar bort {len(toDelete)} korrigeringspar...")
for v, k in toDelete:
print(v, k)
del verfs[v]
del verfs[k]
print(f"All verfs {len(verfs)}, All corrections {len(toDelete)*2}")
## FINISH PARSING DATA
for verf, line in verfs.items():
if line['"Kredit"'] > 0:
krediter[verf] = line
elif line['"Debet"'] > 0:
debeter[verf] = line
# FIND DIFFS AND LOG INTO DATA STRUCTURE
for kVerf, kLine in krediter.items(): for kVerf, kLine in krediter.items():
sums[kVerf] = {"value": -float(kLine['"Kredit"'].replace(",",".").replace(" ","")), "debets": []} sums[kVerf] = {"value": -kLine['"Kredit"'], "debets": [], "date": kLine['"Datum"']}
toDel = [] print(sums)
for dVerf, dLine in debeter.items(): toDel = []
if kVerf + " " in dLine['"Beskrivning"'] or dLine['"Beskrivning"'].endswith(kVerf): for dVerf, dLine in debeter.items():
sums[kVerf]["value"] = sums[kVerf]["value"] + float(dLine['"Debet"'].replace(",",".").replace(" ","")) debetVal = dLine['"Debet"']
sums[kVerf]["debets"] = sums[kVerf]["debets"] + [dVerf] for kVerf in re.findall("(A\d+)(?:\D){0,1}",dLine['"Beskrivning"']):
if debetVal == 0:
continue
if kVerf not in sums:
if kVerf not in corrections:
print(f"oopsie, {kVerf} finns inte som kreditverifikat")
continue
sumVal = sums[kVerf]["value"]
if abs(sumVal + debetVal) < 0.0001:
sums[kVerf]["value"] = 0
debetVal = 0
toDel.append(dVerf) toDel.append(dVerf)
for dVerf in toDel: elif sumVal + debetVal < 0:
sums[kVerf]["value"] = sumVal + debetVal
debetVal = 0
toDel.append(dVerf)
else:
sums[kVerf]["value"] = sumVal + debetVal
debetVal = debetVal - sumVal
sums[kVerf]["debets"] = sums[kVerf]["debets"] + [dVerf]
for dVerf in list(set(toDel)):
#print(dVerf)
del debeter[dVerf] del debeter[dVerf]
print(f"All verfs {len(debeter) + len(krediter)}, All corrections {len(toDelete)*2}, All matched debeter {len(toDel)}")
# PRINT!
total = 0
for verf, a in sums.items(): for verf, a in sums.items():
if abs(a["value"]) > 0.0001: if abs(a["value"]) > 0.0001:
total += a["value"]
print(verf, ": ", a) print(verf, ": ", a)
else:
#seen = {} print(f"oki, paid verf {verf}: {a}")
# print("Här kommer omatchade debeter")
#for verf in content: for debet, debetLine in debeter.items():
# if verf[1] not in seen.keys(): print(debet + ": " + debetLine['"Beskrivning"'] + " -- ", debetLine['"Debet"'])
# seen[verf[1]] = verf[0] total += debetLine['"Debet"']
# else: print(total)
# seen.pop(verf[1])
#
#for kr, verf in seen.items():
# print(verf, kr)