meta { name: 04 In-app respond paid type: http seq: 4 } post { url: {{baseUrl}}/api/v1/checkin/inapp/{{invoiceId}}/paid body: none auth: bearer } auth:bearer { token: {{token}} } tests { test("200 OK", function () { expect(res.getStatus()).to.equal(200); }); test("status = paid", function () { expect(res.getBody().data.status).to.equal("paid"); }); } docs { POST /api/v1/checkin/inapp/:invoiceId/paid — auth requise Réponse "Oui — la facture est payée" depuis l'app (modale check-in OU bouton "Marquer encaissée" sur la fiche). Effets identiques au lien email mais auth-based (pas de token URL). Effets : - CheckinTask (si elle existe) : status='answered', answer='paid' - Invoice : status='paid', paid_at=now, rubis_earned+1 - Organization.rubis_count+1 - ActivityEvent kind=invoice_paid (label "via confirmation") - Toutes les RelanceTask scheduled de la facture → cancelled Réponse : la facture sérialisée (status='paid' désormais). Précondition : `invoiceId` doit appartenir à l'org de l'user (404 sinon). Idempotent : si déjà paid → renvoie l'état courant sans bumper. }