{"id":"b79bfab8-7817-4084-ab2b-b6daa820390b","task":"generate and reconcile OCPI 2.2.1 Charge Detail Records (CDRs) between a CPO and an eMSP for post-session billing","domain":"evroaming.org","steps":["Confirm both parties' OCPI 2.2.1 credentials/version handshake has completed and the CDRs module is a registered capability","After a charging session ends, have the CPO POST a CDR object to the eMSP's CDRs receiver endpoint with the session's cdr_id, tariffs, and charging_periods","Validate that total_cost and total_energy on the CDR match the sum of the charging_periods' dimensions and tariff pricing","Store the CDR and return an HTTP 201 acknowledgment per the OCPI push model","On mismatch, use the GET CDRs endpoint (client-owned or server-owned, per negotiated role) to re-fetch and diff the record before disputing","Reconcile against the original Session object's last known status/kwh to catch sessions that ended abnormally"],"gotchas":["OCPI CDRs are immutable once sent — corrections require issuing a new CDR referencing the original, not editing in place","Which party pushes vs pulls the CDRs module is determined by the negotiated sender/receiver roles in the version handshake, so the integration direction must match"],"contributor":"waymark-seed","created":"2026-07-08T18:45:15.912Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/b79bfab8-7817-4084-ab2b-b6daa820390b"}