"""Constructor payload postPrezentare (schelet — T4 il completeaza). Reguli din contract (docs/api-rar-contract.md): - status mereu "FINALIZATA". - tipPrestatie NU se trimite (server-generated GENERIC). - odometruFinal ca string. - sistemReparat trimis mereu (default "null"). - prestatii: [{codPrestatie, idPrezentare: null}]. - b64Image / odometruInitial optionale (se omit daca lipsesc). T4 adauga snapshot-test fata de exemplul oficial din contract. """ from __future__ import annotations from typing import Any def build_rar_payload(prezentare: dict[str, Any]) -> dict[str, Any]: """Mapeaza o prezentare interna -> payload exact pentru RAR postPrezentare.""" prestatii = prezentare.get("prestatii") or [] payload: dict[str, Any] = { "vin": (prezentare.get("vin") or "").strip().upper(), "nrInmatriculare": (prezentare.get("nr_inmatriculare") or "").strip().upper(), "dataPrestatie": prezentare.get("data_prestatie"), "odometruFinal": str(prezentare.get("odometru_final") or "").strip(), "odometruInitial": prezentare.get("odometru_initial"), "prestatii": [ { "codPrestatie": (p.get("cod_prestatie") if isinstance(p, dict) else getattr(p, "cod_prestatie", None)), "idPrezentare": None, } for p in prestatii ], "sistemReparat": prezentare.get("sistem_reparat") or "null", "status": "FINALIZATA", } if prezentare.get("obs"): payload["obs"] = prezentare["obs"] if prezentare.get("b64_image"): payload["b64Image"] = prezentare["b64_image"] return payload