@wevion/cli 1.0.3327 → 1.0.3337

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/openapi.json +809 -55
  2. package/package.json +1 -1
package/openapi.json CHANGED
@@ -158867,9 +158867,16 @@
158867
158867
  "type": "string"
158868
158868
  },
158869
158869
  "sla_due_at": {
158870
- "description": "Entro quando rispondiamo.",
158871
- "format": "date-time",
158872
- "type": "string"
158870
+ "description": "Entro quando rispondiamo. **`null` sugli stati chiusi** (approvata, rifiutata, ritirata, scaduta): su una pratica già decisa nessuna risposta è più dovuta, e prometterne una sarebbe falso (D21).",
158871
+ "anyOf": [
158872
+ {
158873
+ "format": "date-time",
158874
+ "type": "string"
158875
+ },
158876
+ {
158877
+ "type": "null"
158878
+ }
158879
+ ]
158873
158880
  },
158874
158881
  "status": {
158875
158882
  "description": "Stato della pratica.",
@@ -159621,6 +159628,7 @@
159621
159628
  "correction_batch_id",
159622
159629
  "currency",
159623
159630
  "description",
159631
+ "dispute",
159624
159632
  "entry_id",
159625
159633
  "gross_invoice_minor",
159626
159634
  "hold_reason",
@@ -159684,6 +159692,101 @@
159684
159692
  "description": "Tipo di movimento: accrued, reversed, payout, correction…",
159685
159693
  "type": "string"
159686
159694
  },
159695
+ "dispute": {
159696
+ "description": "La contestazione VIVA (`open` o `in_review`) su questo denaro, comunque sia stata aperta: sulla riga di ledger o sulla commissione collegata. `null` quando non ce n’è nessuna. Serve al pannello per mostrare la pratica sulla riga e per spegnere «Contesta»: senza, il partner non vede nulla dopo l’invio, riprova, e ottiene un 409 che l’interfaccia poteva evitare.",
159697
+ "anyOf": [
159698
+ {
159699
+ "additionalProperties": false,
159700
+ "type": "object",
159701
+ "required": [
159702
+ "due_on",
159703
+ "id",
159704
+ "opened_on",
159705
+ "reason_code",
159706
+ "status"
159707
+ ],
159708
+ "properties": {
159709
+ "due_on": {
159710
+ "description": "Entro quando rispondiamo (SLA congelato all’apertura).",
159711
+ "format": "date",
159712
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
159713
+ "type": "string"
159714
+ },
159715
+ "id": {
159716
+ "description": "Numero di pratica.",
159717
+ "format": "uuid",
159718
+ "type": "string"
159719
+ },
159720
+ "opened_on": {
159721
+ "description": "Giorno di apertura.",
159722
+ "format": "date",
159723
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
159724
+ "type": "string"
159725
+ },
159726
+ "reason_code": {
159727
+ "description": "Motivo indicato all’apertura. È un CODICE, non una frase, e l’insieme è **chiuso**: uno dei sette, oppure `unknown`. La chiusura non è cosmetica — `partner_dispute.reason_code` è una `VARCHAR(40)` senza `CHECK`, e i casi aperti dal backoffice ci scrivono un codice deciso da un operatore: senza normalizzazione questa rotta spedirebbe una stringa arbitraria scritta da noi verso l’esterno.",
159728
+ "anyOf": [
159729
+ {
159730
+ "type": "string",
159731
+ "enum": [
159732
+ "amount_wrong"
159733
+ ]
159734
+ },
159735
+ {
159736
+ "type": "string",
159737
+ "enum": [
159738
+ "rate_wrong"
159739
+ ]
159740
+ },
159741
+ {
159742
+ "type": "string",
159743
+ "enum": [
159744
+ "missing_commission"
159745
+ ]
159746
+ },
159747
+ {
159748
+ "type": "string",
159749
+ "enum": [
159750
+ "reversal_wrong"
159751
+ ]
159752
+ },
159753
+ {
159754
+ "type": "string",
159755
+ "enum": [
159756
+ "cap_applied"
159757
+ ]
159758
+ },
159759
+ {
159760
+ "type": "string",
159761
+ "enum": [
159762
+ "window_wrong"
159763
+ ]
159764
+ },
159765
+ {
159766
+ "type": "string",
159767
+ "enum": [
159768
+ "other"
159769
+ ]
159770
+ },
159771
+ {
159772
+ "type": "string",
159773
+ "enum": [
159774
+ "unknown"
159775
+ ]
159776
+ }
159777
+ ]
159778
+ },
159779
+ "status": {
159780
+ "description": "`open` oppure `in_review`. Gli stati terminali non arrivano qui.",
159781
+ "type": "string"
159782
+ }
159783
+ }
159784
+ },
159785
+ {
159786
+ "type": "null"
159787
+ }
159788
+ ]
159789
+ },
159687
159790
  "entry_id": {
159688
159791
  "description": "Id della scrittura.",
159689
159792
  "format": "uuid",
@@ -160191,9 +160294,12 @@
160191
160294
  "additionalProperties": false,
160192
160295
  "type": "object",
160193
160296
  "required": [
160297
+ "allocated_minor",
160194
160298
  "amount_minor",
160195
160299
  "batch_period",
160196
160300
  "currency",
160301
+ "hold_reason",
160302
+ "hold_until",
160197
160303
  "id",
160198
160304
  "net_minor",
160199
160305
  "paid_on",
@@ -160203,8 +160309,13 @@
160203
160309
  "withholding_minor"
160204
160310
  ],
160205
160311
  "properties": {
160312
+ "allocated_minor": {
160313
+ "description": "Il denaro che la riga rappresenta, pagato o TRATTENUTO che sia. Su una riga ferma è l’unico campo in cui esiste: `gross = allocated − offset` e il run non alloca il lordo di ciò che non paga, quindi `amount_minor` vale 0 e mostrarlo da solo fa leggere «pagamento da zero euro» a chi ne ha 527,50 fermi. Minor units (centesimi) come stringa decimale.",
160314
+ "pattern": "^-?[0-9]+$",
160315
+ "type": "string"
160316
+ },
160206
160317
  "amount_minor": {
160207
- "description": "Lordo del payout. Minor units (centesimi) come stringa decimale.",
160318
+ "description": "Lordo del payout. Zero sulle righe ferme: l’importo vero è `allocated_minor`. Minor units (centesimi) come stringa decimale.",
160208
160319
  "pattern": "^-?[0-9]+$",
160209
160320
  "type": "string"
160210
160321
  },
@@ -160218,6 +160329,31 @@
160218
160329
  "description": "Valuta del payout.",
160219
160330
  "type": "string"
160220
160331
  },
160332
+ "hold_reason": {
160333
+ "description": "Perché la riga è FERMA (`PAYOUT_HOLD_REASONS`: kyc_level, collection_mode_accrual, program_frozen…). `null` sulle righe non ferme. È un CODICE, cioè una chiave i18n stabile: la frase la sceglie il pannello nella lingua del partner. Il database lo impone su ogni riga `held` (vincolo `ck`), quindi una riga ferma senza motivo non esiste.",
160334
+ "anyOf": [
160335
+ {
160336
+ "type": "string"
160337
+ },
160338
+ {
160339
+ "type": "null"
160340
+ }
160341
+ ]
160342
+ },
160343
+ "hold_until": {
160344
+ "description": "`hold_sla_due_at`: la scadenza che ci siamo dati NOI, non una promessa di pagamento. `null` sulle righe non ferme. È ciò che distingue «fermo» da «fermo per sempre».",
160345
+ "anyOf": [
160346
+ {
160347
+ "description": "Termine entro cui la riga ferma va lavorata.",
160348
+ "format": "date",
160349
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
160350
+ "type": "string"
160351
+ },
160352
+ {
160353
+ "type": "null"
160354
+ }
160355
+ ]
160356
+ },
160221
160357
  "id": {
160222
160358
  "description": "Id della riga di payout.",
160223
160359
  "format": "uuid",
@@ -160901,6 +161037,7 @@
160901
161037
  "required": [
160902
161038
  "balance",
160903
161039
  "clocks",
161040
+ "code",
160904
161041
  "collection_mode",
160905
161042
  "coupon",
160906
161043
  "credit",
@@ -160910,6 +161047,7 @@
160910
161047
  "next_payout",
160911
161048
  "partner_id",
160912
161049
  "partner_profile",
161050
+ "payout_request",
160913
161051
  "payout_ready",
160914
161052
  "primary_link",
160915
161053
  "public_profile",
@@ -160979,6 +161117,17 @@
160979
161117
  }
160980
161118
  }
160981
161119
  },
161120
+ "code": {
161121
+ "description": "Il **codice invito** del partner: quello che detta a voce e che il referito digita nel campo «Codice invito» in registrazione. `null` finché non ne ha uno attivo. ⚠️ NON è `coupon.code` (uno sconto per il referito) né lo slug di `primary_link` (un URL): sono tre cose diverse, e prima questa era l’unica che il pannello non sapeva mostrare al suo proprietario — il dato era in tabella, ma il pannello ne leggeva solo l’id.",
161122
+ "anyOf": [
161123
+ {
161124
+ "type": "string"
161125
+ },
161126
+ {
161127
+ "type": "null"
161128
+ }
161129
+ ]
161130
+ },
160982
161131
  "collection_mode": {
160983
161132
  "description": "cash | accrual | community_benefit (§6.6).",
160984
161133
  "type": "string"
@@ -161102,6 +161251,7 @@
161102
161251
  "amount_minor",
161103
161252
  "blockers",
161104
161253
  "date",
161254
+ "held",
161105
161255
  "threshold_minor"
161106
161256
  ],
161107
161257
  "properties": {
@@ -161111,7 +161261,7 @@
161111
161261
  "type": "string"
161112
161262
  },
161113
161263
  "blockers": {
161114
- "description": "Cosa impedisce il bonifico: kyc_l1_missing, vat_missing, invoice_missing, below_threshold.",
161264
+ "description": "Cosa impedisce il bonifico, dall’insieme chiuso `PARTNER_PANEL_BLOCKERS` (`lib/partner-reason-codes.ts`): program_frozen, cash_closed, kyc_l1_missing, vat_missing, docs_missing, vies_invalid, awaiting_program_activation, below_threshold. ⚠️ NON è l’enum `PAYOUT_HOLD_REASONS`, che dice perché una riga di payout già creata è ferma e parla a un operatore: questo dice perché un bonifico non nascerà, e parla al partner. Il tipo resta `string` di proposito, così un client vecchio non si rompe se l’insieme cresce.",
161115
161265
  "type": "array",
161116
161266
  "items": {
161117
161267
  "description": "Codice del blocco.",
@@ -161124,6 +161274,27 @@
161124
161274
  "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
161125
161275
  "type": "string"
161126
161276
  },
161277
+ "held": {
161278
+ "additionalProperties": false,
161279
+ "description": "★ I pagamenti GIÀ fermi, che `blockers` per costruzione non può vedere: `blockers` guarda lo stato del partner ADESSO e dice se un bonifico nascerà, queste righe dicono che un bonifico è nato e si è fermato. Divergono proprio nel caso che conta, perché il motivo del fermo è una fotografia dell’istante del run e non viene mai rivalutato: un partner che si è messo in regola ha `blockers: []` e le sue righe restano ferme lo stesso. NON è un blocco — la data resta vera per le righe pronte — ma va detto accanto alla data, o il pannello promette un bonifico sopra tre pagamenti che non partiranno.",
161280
+ "type": "object",
161281
+ "required": [
161282
+ "amount_minor",
161283
+ "count"
161284
+ ],
161285
+ "properties": {
161286
+ "amount_minor": {
161287
+ "description": "Denaro complessivamente trattenuto da quelle righe (`allocated_eur_minor`). Minor units (centesimi) come stringa decimale.",
161288
+ "pattern": "^-?[0-9]+$",
161289
+ "type": "string"
161290
+ },
161291
+ "count": {
161292
+ "description": "Quante righe di payout sono ferme.",
161293
+ "minimum": 0,
161294
+ "type": "integer"
161295
+ }
161296
+ }
161297
+ },
161127
161298
  "threshold_minor": {
161128
161299
  "description": "Soglia minima di payout. Minor units (centesimi) come stringa decimale.",
161129
161300
  "pattern": "^-?[0-9]+$",
@@ -161140,6 +161311,128 @@
161140
161311
  "description": "Configurazione dashboard a 4 valori. SOLA LETTURA (§12.5).",
161141
161312
  "type": "string"
161142
161313
  },
161314
+ "payout_request": {
161315
+ "description": "Sportello del prelievo. `null` per chi non incassa in denaro: Binario A (compensato in credito di fatturazione) e `collection_mode` diverso da `cash` (`accrual`, `community_benefit`, cioè chi ha scelto di NON essere pagato). ★ È il blocco che trasforma il ciclo da «raccoglie tutti» a «raccoglie chi ha chiesto».",
161316
+ "anyOf": [
161317
+ {
161318
+ "additionalProperties": false,
161319
+ "type": "object",
161320
+ "required": [
161321
+ "available_minor",
161322
+ "can_request",
161323
+ "currency",
161324
+ "missing_minor",
161325
+ "request",
161326
+ "threshold_minor"
161327
+ ],
161328
+ "properties": {
161329
+ "available_minor": {
161330
+ "description": "Saldo disponibile adesso: è ciò che verrebbe chiesto. Minor units (centesimi) come stringa decimale.",
161331
+ "pattern": "^-?[0-9]+$",
161332
+ "type": "string"
161333
+ },
161334
+ "can_request": {
161335
+ "description": "⚠️ NON è «sono sopra soglia»: è «nessun blocco **e** nessuna richiesta già viva». La soglia è uno dei blocchi (`below_threshold`), quindi l’insieme è quello di `next_payout.blockers` e non un secondo giudizio sullo stesso saldo. Falso con una richiesta aperta: il pulsante è spento perché ce n’è una, non perché manchi qualcosa — e il pannello deve dire quale delle due.",
161336
+ "type": "boolean"
161337
+ },
161338
+ "currency": {
161339
+ "description": "Valuta del wallet. Sempre EUR nell’MVP.",
161340
+ "type": "string"
161341
+ },
161342
+ "missing_minor": {
161343
+ "description": "Quanto manca alla soglia, `0` quando è raggiunta. Esiste perché «non disponibile» non è una risposta: un pulsante spento deve dire perché e quanto manca. Mai negativo. Minor units (centesimi) come stringa decimale.",
161344
+ "pattern": "^-?[0-9]+$",
161345
+ "type": "string"
161346
+ },
161347
+ "request": {
161348
+ "description": "La richiesta viva, o — se non ce n’è — **l’ultima chiusa**. Non sparisce dopo l’invio né dopo il pagamento: una richiesta che sparisce nel momento in cui viene servita è il difetto appena chiuso sulle contestazioni, e qui sarebbe peggiore, perché sparirebbe proprio quando arrivano i soldi.",
161349
+ "anyOf": [
161350
+ {
161351
+ "additionalProperties": false,
161352
+ "type": "object",
161353
+ "required": [
161354
+ "amount_minor",
161355
+ "cancelled_on",
161356
+ "paid_on",
161357
+ "promised_on",
161358
+ "request_id",
161359
+ "requested_on",
161360
+ "status"
161361
+ ],
161362
+ "properties": {
161363
+ "amount_minor": {
161364
+ "description": "⚠️ **Fotografia** del disponibile all’istante della richiesta, NON un’obbligazione: il ciclo paga ciò che il ledger dice quando gira. Va mostrato come «hai chiesto», mai come «riceverai». Minor units (centesimi) come stringa decimale.",
161365
+ "pattern": "^-?[0-9]+$",
161366
+ "type": "string"
161367
+ },
161368
+ "cancelled_on": {
161369
+ "description": "Valorizzato solo su `cancelled`.",
161370
+ "anyOf": [
161371
+ {
161372
+ "description": "Giorno dell’annullamento.",
161373
+ "format": "date",
161374
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
161375
+ "type": "string"
161376
+ },
161377
+ {
161378
+ "type": "null"
161379
+ }
161380
+ ]
161381
+ },
161382
+ "paid_on": {
161383
+ "description": "Valorizzato solo su `paid`.",
161384
+ "anyOf": [
161385
+ {
161386
+ "description": "Giorno del pagamento.",
161387
+ "format": "date",
161388
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
161389
+ "type": "string"
161390
+ },
161391
+ {
161392
+ "type": "null"
161393
+ }
161394
+ ]
161395
+ },
161396
+ "promised_on": {
161397
+ "description": "La promessa congelata alla richiesta: «entro il 15 del mese successivo». ⚠️ NON coincide con `next_payout.date`: la bozza del ciclo nasce il 1°, quindi una richiesta del 3 agosto non può entrare nel pagamento del 15 agosto. È una promessa a una PERSONA, mantenuta a mano perché il bonifico è un atto manuale — da qui la parola «entro».",
161398
+ "format": "date",
161399
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
161400
+ "type": "string"
161401
+ },
161402
+ "request_id": {
161403
+ "description": "Id della richiesta del partner stesso.",
161404
+ "format": "uuid",
161405
+ "type": "string"
161406
+ },
161407
+ "requested_on": {
161408
+ "description": "Giorno in cui il partner ha chiesto.",
161409
+ "format": "date",
161410
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
161411
+ "type": "string"
161412
+ },
161413
+ "status": {
161414
+ "description": "Insieme CHIUSO: `open` · `processing` · `paid` · `cancelled`. `processing` = presa in carico da un ciclo, e da lì si esce sempre: `paid`, oppure di nuovo `open` se il ciclo muore (rilascio automatico). Nessuno dei quattro è un vicolo cieco.",
161415
+ "type": "string"
161416
+ }
161417
+ }
161418
+ },
161419
+ {
161420
+ "type": "null"
161421
+ }
161422
+ ]
161423
+ },
161424
+ "threshold_minor": {
161425
+ "description": "Soglia minima di prelievo (`partner_payout_threshold_eur_minor`). Minor units (centesimi) come stringa decimale.",
161426
+ "pattern": "^-?[0-9]+$",
161427
+ "type": "string"
161428
+ }
161429
+ }
161430
+ },
161431
+ {
161432
+ "type": "null"
161433
+ }
161434
+ ]
161435
+ },
161143
161436
  "payout_ready": {
161144
161437
  "description": "Documenti fiscali a posto. Ortogonale allo stato delle commissioni (§6.2).",
161145
161438
  "type": "boolean"
@@ -162698,70 +162991,525 @@
162698
162991
  }
162699
162992
  }
162700
162993
  },
162701
- "/api/v1/referral/inviter": {
162702
- "get": {
162703
- "operationId": "getReferralInviter",
162704
- "summary": "Chi mi ha invitato",
162994
+ "/api/v1/partner/payout-request": {
162995
+ "post": {
162996
+ "operationId": "createPartnerPayoutRequest",
162997
+ "summary": "Chiedi il pagamento del saldo disponibile",
162705
162998
  "tags": [
162706
162999
  "partner"
162707
163000
  ],
162708
- "description": "Chi ha invitato il richiedente, e quale livello di disvelamento ha scelto. 204 quando il richiedente non è un referito tracciato: non è un errore, è l’assenza di un rapporto.",
163001
+ "description": "Apre una richiesta di prelievo per il partner autenticato. L’importo NON si sceglie: è il saldo disponibile **all’istante della richiesta**, congelato sulla riga come fotografia. ⚠️ Non è un’obbligazione — il ciclo paga ciò che il ledger dice quando gira — ed è questa separazione che rende sicuro rimettere in coda una presa in carico morta senza rischiare un doppio pagamento. Saldo, soglia e blocchi sono **riletti dal server**: la UI non è un controllo, e questa rotta è raggiungibile senza passare da nessun pulsante. `409` = ne esiste già una aperta (l’unicità la impone il database, `uq_ppr_open_partner`, non una SELECT che due schede del browser supererebbero entrambe). `422` = sotto soglia, col numero che manca nel corpo.",
162709
163002
  "security": [
162710
163003
  {
162711
163004
  "bearerAuth": []
162712
163005
  }
162713
163006
  ],
162714
163007
  "responses": {
162715
- "200": {
162716
- "description": "Chi mi ha invitato e quale disvelamento ho scelto.",
163008
+ "201": {
163009
+ "description": "La richiesta appena aperta o appena annullata. Torna lo stato RICALCOLATO, non quello che il client credeva: è ciò che gli permette di mostrare la ricevuta senza una seconda chiamata a `/me`.",
162717
163010
  "content": {
162718
163011
  "application/json": {
162719
163012
  "schema": {
162720
163013
  "additionalProperties": false,
162721
- "description": "Chi mi ha invitato e quale disvelamento ho scelto.",
163014
+ "description": "La richiesta appena aperta o appena annullata. Torna lo stato RICALCOLATO, non quello che il client credeva: è ciò che gli permette di mostrare la ricevuta senza una seconda chiamata a `/me`.",
162722
163015
  "type": "object",
162723
163016
  "required": [
162724
- "inviter",
162725
- "reference",
162726
- "state",
162727
- "wording_key"
163017
+ "amount_minor",
163018
+ "promised_on",
163019
+ "request_id",
163020
+ "requested_on",
163021
+ "status"
162728
163022
  ],
162729
163023
  "properties": {
162730
- "inviter": {
162731
- "description": "Profilo dell’invitante, `null` finché il backoffice non lo ha approvato: è la seconda metà della regola dell’identità reciproca (§4.5). Senza approvazione il referito sa che esiste un invitante, non chi è — esattamente come il partner vede una cella coperta.",
162732
- "anyOf": [
162733
- {
162734
- "additionalProperties": false,
162735
- "type": "object",
162736
- "required": [
162737
- "avatar_url",
162738
- "display_name",
162739
- "tagline"
162740
- ],
162741
- "properties": {
162742
- "avatar_url": {
162743
- "description": "Avatar pubblico dell’invitante.",
162744
- "anyOf": [
162745
- {
162746
- "type": "string"
162747
- },
162748
- {
162749
- "type": "null"
162750
- }
162751
- ]
162752
- },
162753
- "display_name": {
162754
- "description": "Nome pubblico dell’invitante.",
162755
- "anyOf": [
162756
- {
162757
- "type": "string"
162758
- },
162759
- {
162760
- "type": "null"
162761
- }
162762
- ]
162763
- },
162764
- "tagline": {
163024
+ "amount_minor": {
163025
+ "description": "Importo chiesto, congelato alla richiesta. Minor units (centesimi) come stringa decimale.",
163026
+ "pattern": "^-?[0-9]+$",
163027
+ "type": "string"
163028
+ },
163029
+ "promised_on": {
163030
+ "description": "Entro quando la pagheremo: il 15 del mese successivo alla richiesta.",
163031
+ "format": "date",
163032
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
163033
+ "type": "string"
163034
+ },
163035
+ "request_id": {
163036
+ "description": "Id della richiesta.",
163037
+ "format": "uuid",
163038
+ "type": "string"
163039
+ },
163040
+ "requested_on": {
163041
+ "description": "Giorno della richiesta.",
163042
+ "format": "date",
163043
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
163044
+ "type": "string"
163045
+ },
163046
+ "status": {
163047
+ "description": "`open` dopo l’apertura, `cancelled` dopo l’annullamento.",
163048
+ "type": "string"
163049
+ }
163050
+ }
163051
+ }
163052
+ }
163053
+ }
163054
+ },
163055
+ "401": {
163056
+ "description": "Errore standard del backend.",
163057
+ "content": {
163058
+ "application/json": {
163059
+ "schema": {
163060
+ "additionalProperties": false,
163061
+ "description": "Errore standard del backend.",
163062
+ "type": "object",
163063
+ "required": [
163064
+ "error",
163065
+ "message",
163066
+ "statusCode"
163067
+ ],
163068
+ "properties": {
163069
+ "code": {
163070
+ "description": "Codice macchina dell’errore, quando disponibile.",
163071
+ "type": "string"
163072
+ },
163073
+ "error": {
163074
+ "description": "Etichetta breve dell’errore.",
163075
+ "type": "string"
163076
+ },
163077
+ "message": {
163078
+ "description": "Messaggio leggibile.",
163079
+ "type": "string"
163080
+ },
163081
+ "statusCode": {
163082
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163083
+ "type": "integer"
163084
+ }
163085
+ }
163086
+ }
163087
+ }
163088
+ }
163089
+ },
163090
+ "403": {
163091
+ "description": "Errore standard del backend.",
163092
+ "content": {
163093
+ "application/json": {
163094
+ "schema": {
163095
+ "additionalProperties": false,
163096
+ "description": "Errore standard del backend.",
163097
+ "type": "object",
163098
+ "required": [
163099
+ "error",
163100
+ "message",
163101
+ "statusCode"
163102
+ ],
163103
+ "properties": {
163104
+ "code": {
163105
+ "description": "Codice macchina dell’errore, quando disponibile.",
163106
+ "type": "string"
163107
+ },
163108
+ "error": {
163109
+ "description": "Etichetta breve dell’errore.",
163110
+ "type": "string"
163111
+ },
163112
+ "message": {
163113
+ "description": "Messaggio leggibile.",
163114
+ "type": "string"
163115
+ },
163116
+ "statusCode": {
163117
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163118
+ "type": "integer"
163119
+ }
163120
+ }
163121
+ }
163122
+ }
163123
+ }
163124
+ },
163125
+ "409": {
163126
+ "description": "Errore standard del backend.",
163127
+ "content": {
163128
+ "application/json": {
163129
+ "schema": {
163130
+ "additionalProperties": false,
163131
+ "description": "Errore standard del backend.",
163132
+ "type": "object",
163133
+ "required": [
163134
+ "error",
163135
+ "message",
163136
+ "statusCode"
163137
+ ],
163138
+ "properties": {
163139
+ "code": {
163140
+ "description": "Codice macchina dell’errore, quando disponibile.",
163141
+ "type": "string"
163142
+ },
163143
+ "error": {
163144
+ "description": "Etichetta breve dell’errore.",
163145
+ "type": "string"
163146
+ },
163147
+ "message": {
163148
+ "description": "Messaggio leggibile.",
163149
+ "type": "string"
163150
+ },
163151
+ "statusCode": {
163152
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163153
+ "type": "integer"
163154
+ }
163155
+ }
163156
+ }
163157
+ }
163158
+ }
163159
+ },
163160
+ "422": {
163161
+ "description": "Errore standard del backend.",
163162
+ "content": {
163163
+ "application/json": {
163164
+ "schema": {
163165
+ "additionalProperties": false,
163166
+ "description": "Errore standard del backend.",
163167
+ "type": "object",
163168
+ "required": [
163169
+ "error",
163170
+ "message",
163171
+ "statusCode"
163172
+ ],
163173
+ "properties": {
163174
+ "code": {
163175
+ "description": "Codice macchina dell’errore, quando disponibile.",
163176
+ "type": "string"
163177
+ },
163178
+ "error": {
163179
+ "description": "Etichetta breve dell’errore.",
163180
+ "type": "string"
163181
+ },
163182
+ "message": {
163183
+ "description": "Messaggio leggibile.",
163184
+ "type": "string"
163185
+ },
163186
+ "statusCode": {
163187
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163188
+ "type": "integer"
163189
+ }
163190
+ }
163191
+ }
163192
+ }
163193
+ }
163194
+ },
163195
+ "429": {
163196
+ "description": "Errore standard del backend.",
163197
+ "content": {
163198
+ "application/json": {
163199
+ "schema": {
163200
+ "additionalProperties": false,
163201
+ "description": "Errore standard del backend.",
163202
+ "type": "object",
163203
+ "required": [
163204
+ "error",
163205
+ "message",
163206
+ "statusCode"
163207
+ ],
163208
+ "properties": {
163209
+ "code": {
163210
+ "description": "Codice macchina dell’errore, quando disponibile.",
163211
+ "type": "string"
163212
+ },
163213
+ "error": {
163214
+ "description": "Etichetta breve dell’errore.",
163215
+ "type": "string"
163216
+ },
163217
+ "message": {
163218
+ "description": "Messaggio leggibile.",
163219
+ "type": "string"
163220
+ },
163221
+ "statusCode": {
163222
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163223
+ "type": "integer"
163224
+ }
163225
+ }
163226
+ }
163227
+ }
163228
+ }
163229
+ }
163230
+ }
163231
+ }
163232
+ },
163233
+ "/api/v1/partner/payout-request/{request_id}": {
163234
+ "delete": {
163235
+ "operationId": "cancelPartnerPayoutRequest",
163236
+ "summary": "Annulla la richiesta di prelievo",
163237
+ "tags": [
163238
+ "partner"
163239
+ ],
163240
+ "description": "★ Annulla una richiesta di prelievo ancora `open`. È la porta d’uscita, e nasce nella stessa consegna dell’ingresso: in questo programma sono stati trovati **sei** stati in cui il sistema entra e non sa uscire, e il settimo non si aggiunge qui. `409` con codice `PARTNER_PAYOUT_REQUEST_IN_RUN` quando la richiesta è già entrata in un ciclo — da lì non si torna indietro, ma il pagamento **arriverà**, ed è una frase diversa da «non si può». Una presa in carico rimasta ferma oltre il tempo massimo viene rimessa in coda **in questo stesso gesto**, così chi annulla non deve aspettare un giro in più per riavere il controllo.",
163241
+ "parameters": [
163242
+ {
163243
+ "schema": {
163244
+ "format": "uuid",
163245
+ "type": "string"
163246
+ },
163247
+ "in": "path",
163248
+ "name": "request_id",
163249
+ "required": true,
163250
+ "description": "Id della richiesta da annullare."
163251
+ }
163252
+ ],
163253
+ "security": [
163254
+ {
163255
+ "bearerAuth": []
163256
+ }
163257
+ ],
163258
+ "responses": {
163259
+ "200": {
163260
+ "description": "La richiesta appena aperta o appena annullata. Torna lo stato RICALCOLATO, non quello che il client credeva: è ciò che gli permette di mostrare la ricevuta senza una seconda chiamata a `/me`.",
163261
+ "content": {
163262
+ "application/json": {
163263
+ "schema": {
163264
+ "additionalProperties": false,
163265
+ "description": "La richiesta appena aperta o appena annullata. Torna lo stato RICALCOLATO, non quello che il client credeva: è ciò che gli permette di mostrare la ricevuta senza una seconda chiamata a `/me`.",
163266
+ "type": "object",
163267
+ "required": [
163268
+ "amount_minor",
163269
+ "promised_on",
163270
+ "request_id",
163271
+ "requested_on",
163272
+ "status"
163273
+ ],
163274
+ "properties": {
163275
+ "amount_minor": {
163276
+ "description": "Importo chiesto, congelato alla richiesta. Minor units (centesimi) come stringa decimale.",
163277
+ "pattern": "^-?[0-9]+$",
163278
+ "type": "string"
163279
+ },
163280
+ "promised_on": {
163281
+ "description": "Entro quando la pagheremo: il 15 del mese successivo alla richiesta.",
163282
+ "format": "date",
163283
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
163284
+ "type": "string"
163285
+ },
163286
+ "request_id": {
163287
+ "description": "Id della richiesta.",
163288
+ "format": "uuid",
163289
+ "type": "string"
163290
+ },
163291
+ "requested_on": {
163292
+ "description": "Giorno della richiesta.",
163293
+ "format": "date",
163294
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
163295
+ "type": "string"
163296
+ },
163297
+ "status": {
163298
+ "description": "`open` dopo l’apertura, `cancelled` dopo l’annullamento.",
163299
+ "type": "string"
163300
+ }
163301
+ }
163302
+ }
163303
+ }
163304
+ }
163305
+ },
163306
+ "401": {
163307
+ "description": "Errore standard del backend.",
163308
+ "content": {
163309
+ "application/json": {
163310
+ "schema": {
163311
+ "additionalProperties": false,
163312
+ "description": "Errore standard del backend.",
163313
+ "type": "object",
163314
+ "required": [
163315
+ "error",
163316
+ "message",
163317
+ "statusCode"
163318
+ ],
163319
+ "properties": {
163320
+ "code": {
163321
+ "description": "Codice macchina dell’errore, quando disponibile.",
163322
+ "type": "string"
163323
+ },
163324
+ "error": {
163325
+ "description": "Etichetta breve dell’errore.",
163326
+ "type": "string"
163327
+ },
163328
+ "message": {
163329
+ "description": "Messaggio leggibile.",
163330
+ "type": "string"
163331
+ },
163332
+ "statusCode": {
163333
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163334
+ "type": "integer"
163335
+ }
163336
+ }
163337
+ }
163338
+ }
163339
+ }
163340
+ },
163341
+ "403": {
163342
+ "description": "Errore standard del backend.",
163343
+ "content": {
163344
+ "application/json": {
163345
+ "schema": {
163346
+ "additionalProperties": false,
163347
+ "description": "Errore standard del backend.",
163348
+ "type": "object",
163349
+ "required": [
163350
+ "error",
163351
+ "message",
163352
+ "statusCode"
163353
+ ],
163354
+ "properties": {
163355
+ "code": {
163356
+ "description": "Codice macchina dell’errore, quando disponibile.",
163357
+ "type": "string"
163358
+ },
163359
+ "error": {
163360
+ "description": "Etichetta breve dell’errore.",
163361
+ "type": "string"
163362
+ },
163363
+ "message": {
163364
+ "description": "Messaggio leggibile.",
163365
+ "type": "string"
163366
+ },
163367
+ "statusCode": {
163368
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163369
+ "type": "integer"
163370
+ }
163371
+ }
163372
+ }
163373
+ }
163374
+ }
163375
+ },
163376
+ "409": {
163377
+ "description": "Errore standard del backend.",
163378
+ "content": {
163379
+ "application/json": {
163380
+ "schema": {
163381
+ "additionalProperties": false,
163382
+ "description": "Errore standard del backend.",
163383
+ "type": "object",
163384
+ "required": [
163385
+ "error",
163386
+ "message",
163387
+ "statusCode"
163388
+ ],
163389
+ "properties": {
163390
+ "code": {
163391
+ "description": "Codice macchina dell’errore, quando disponibile.",
163392
+ "type": "string"
163393
+ },
163394
+ "error": {
163395
+ "description": "Etichetta breve dell’errore.",
163396
+ "type": "string"
163397
+ },
163398
+ "message": {
163399
+ "description": "Messaggio leggibile.",
163400
+ "type": "string"
163401
+ },
163402
+ "statusCode": {
163403
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163404
+ "type": "integer"
163405
+ }
163406
+ }
163407
+ }
163408
+ }
163409
+ }
163410
+ },
163411
+ "429": {
163412
+ "description": "Errore standard del backend.",
163413
+ "content": {
163414
+ "application/json": {
163415
+ "schema": {
163416
+ "additionalProperties": false,
163417
+ "description": "Errore standard del backend.",
163418
+ "type": "object",
163419
+ "required": [
163420
+ "error",
163421
+ "message",
163422
+ "statusCode"
163423
+ ],
163424
+ "properties": {
163425
+ "code": {
163426
+ "description": "Codice macchina dell’errore, quando disponibile.",
163427
+ "type": "string"
163428
+ },
163429
+ "error": {
163430
+ "description": "Etichetta breve dell’errore.",
163431
+ "type": "string"
163432
+ },
163433
+ "message": {
163434
+ "description": "Messaggio leggibile.",
163435
+ "type": "string"
163436
+ },
163437
+ "statusCode": {
163438
+ "description": "Codice di stato HTTP ripetuto nel corpo.",
163439
+ "type": "integer"
163440
+ }
163441
+ }
163442
+ }
163443
+ }
163444
+ }
163445
+ }
163446
+ }
163447
+ }
163448
+ },
163449
+ "/api/v1/referral/inviter": {
163450
+ "get": {
163451
+ "operationId": "getReferralInviter",
163452
+ "summary": "Chi mi ha invitato",
163453
+ "tags": [
163454
+ "partner"
163455
+ ],
163456
+ "description": "Chi ha invitato il richiedente, e quale livello di disvelamento ha scelto. 204 quando il richiedente non è un referito tracciato: non è un errore, è l’assenza di un rapporto.",
163457
+ "security": [
163458
+ {
163459
+ "bearerAuth": []
163460
+ }
163461
+ ],
163462
+ "responses": {
163463
+ "200": {
163464
+ "description": "Chi mi ha invitato e quale disvelamento ho scelto.",
163465
+ "content": {
163466
+ "application/json": {
163467
+ "schema": {
163468
+ "additionalProperties": false,
163469
+ "description": "Chi mi ha invitato e quale disvelamento ho scelto.",
163470
+ "type": "object",
163471
+ "required": [
163472
+ "inviter",
163473
+ "reference",
163474
+ "state",
163475
+ "wording_key"
163476
+ ],
163477
+ "properties": {
163478
+ "inviter": {
163479
+ "description": "Profilo dell’invitante, `null` finché il backoffice non lo ha approvato: è la seconda metà della regola dell’identità reciproca (§4.5). Senza approvazione il referito sa che esiste un invitante, non chi è — esattamente come il partner vede una cella coperta.",
163480
+ "anyOf": [
163481
+ {
163482
+ "additionalProperties": false,
163483
+ "type": "object",
163484
+ "required": [
163485
+ "avatar_url",
163486
+ "display_name",
163487
+ "tagline"
163488
+ ],
163489
+ "properties": {
163490
+ "avatar_url": {
163491
+ "description": "Avatar pubblico dell’invitante.",
163492
+ "anyOf": [
163493
+ {
163494
+ "type": "string"
163495
+ },
163496
+ {
163497
+ "type": "null"
163498
+ }
163499
+ ]
163500
+ },
163501
+ "display_name": {
163502
+ "description": "Nome pubblico dell’invitante.",
163503
+ "anyOf": [
163504
+ {
163505
+ "type": "string"
163506
+ },
163507
+ {
163508
+ "type": "null"
163509
+ }
163510
+ ]
163511
+ },
163512
+ "tagline": {
162765
163513
  "description": "Una riga di presentazione.",
162766
163514
  "anyOf": [
162767
163515
  {
@@ -163701,7 +164449,7 @@
163701
164449
  ]
163702
164450
  },
163703
164451
  "utm_campaign": {
163704
- "description": "UTM generato da Wevion, non modificabile.",
164452
+ "description": "UTM campagna della variante: quello chiesto in creazione, normalizzato, oppure quello derivato dal nome quando non è stato chiesto.",
163705
164453
  "type": "string"
163706
164454
  },
163707
164455
  "utm_content": {
@@ -163867,6 +164615,12 @@
163867
164615
  "maxLength": 60,
163868
164616
  "minLength": 1,
163869
164617
  "type": "string"
164618
+ },
164619
+ "utm_campaign": {
164620
+ "description": "UTM campagna scelto dal partner. Omesso, il server lo deriva dal nome — che è ciò che faceva SEMPRE, anche quando il campo veniva mandato. Normalizzato con la stessa regola del ripiego (minuscolo, non-alfanumerici a trattino, massimo 120): un UTM è un pezzo di URL, e «Estate 26» e «estate-26» non devono diventare due campagne nei rapporti.",
164621
+ "maxLength": 120,
164622
+ "minLength": 1,
164623
+ "type": "string"
163870
164624
  }
163871
164625
  }
163872
164626
  }
@@ -163946,7 +164700,7 @@
163946
164700
  ]
163947
164701
  },
163948
164702
  "utm_campaign": {
163949
- "description": "UTM generato da Wevion, non modificabile.",
164703
+ "description": "UTM campagna della variante: quello chiesto in creazione, normalizzato, oppure quello derivato dal nome quando non è stato chiesto.",
163950
164704
  "type": "string"
163951
164705
  },
163952
164706
  "utm_content": {
@@ -164232,7 +164986,7 @@
164232
164986
  ]
164233
164987
  },
164234
164988
  "utm_campaign": {
164235
- "description": "UTM generato da Wevion, non modificabile.",
164989
+ "description": "UTM campagna della variante: quello chiesto in creazione, normalizzato, oppure quello derivato dal nome quando non è stato chiesto.",
164236
164990
  "type": "string"
164237
164991
  },
164238
164992
  "utm_content": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wevion/cli",
3
- "version": "1.0.3327",
3
+ "version": "1.0.3337",
4
4
  "description": "Wevion API command-line interface — generated from the public OpenAPI spec",
5
5
  "type": "module",
6
6
  "bin": {