MEGAINFRA-WEBAPP/scripts/pb-add-dn-doc-type.py
DEls 5fe618f395 feat(dn-pipeline): classify document type instead of assuming delivery note
Five of fourteen blocked batches were tax invoices or collection notes,
which have no delivery note number. Also stops reading a composite
reference like '22433700 / 2025344290' as three separate documents.

Co-Authored-By: MiniMax <noreply@minimax.io>
2026-09-17 21:45:08 +02:00

54 lines
No EOL
1.9 KiB
Python

#!/usr/bin/env python3
"""
Adds doc_type / doc_number / doc_number_alts to dn_batch_notes, and
document_type to delivery_notes.
Five of fourteen blocked batches are tax invoices or collection notes.
They have no delivery note number, so the pipeline detected no notes and
orphaned the page. The identity of an invoice is its invoice number; of a
collection note, its document number. Requiring a delivery note number
was the wrong question.
Idempotent.
"""
import sys
from pb_env import PB, http, superuser_token
WANTED = {
"dn_batch_notes": [
{"name": "doc_type", "type": "select", "required": False, "maxSelect": 1,
"values": ["delivery_note", "invoice", "collection_note", "unknown"]},
{"name": "doc_number", "type": "text", "required": False},
{"name": "doc_number_alts", "type": "json", "required": False, "maxSize": 100000},
],
"delivery_notes": [
{"name": "document_type", "type": "select", "required": False, "maxSelect": 1,
"values": ["delivery_note", "invoice", "collection_note", "unknown"]},
],
}
def main():
token = superuser_token()
print(f"\n→ {PB}")
for name, wanted in WANTED.items():
code, coll = http("GET", f"/api/collections/{name}", token=token)
if code != 200:
sys.exit(f"GET {name} failed: {code} {coll}")
fields = list(coll.get("fields", []))
have = {f.get("name") for f in fields}
add = [w for w in wanted if w["name"] not in have]
if not add:
print(f" • {name}: nothing to add")
continue
code, resp = http("PATCH", f"/api/collections/{coll['id']}", {"fields": fields + add}, token)
if code != 200:
sys.exit(f"PATCH {name} failed: {code} {resp}")
for a in add:
print(f" ✓ {name}: added {a['name']}")
if __name__ == "__main__":
main()
print("\nDone.")