updated script, more work needed
This commit is contained in:
parent
d9b391d66f
commit
502e9331e3
130
findUniques2.py
130
findUniques2.py
@ -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)
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user