Create a new transaction.
Aceita conta bancária OU cartão de crédito como origem, nunca as duas e nunca nenhuma (Decisão B). Com credit_card_account_id, installments (ausente ou 1 = à vista, teto 24) parcela a compra e payment_date não é aceito — quem é paga é a fatura. Compra cuja competência cai em fatura já paga é realocada para a próxima fatura aberta, sem recusar (RQ-5’); a resposta traz warnings com o aviso. Compra parcelada consome UMA unidade da cota mensal, não N.
Authorizations
Token da sessão no cabeçalho Authorization, no formato Bearer (mesmo esquema ApiKeyAuth do contrato).
Headers
company uuid
Body
Transaction data
CostCenterID e BankAccountID seguem string (e não ponteiro): o corpo atual continua válido byte a byte, e ausência de conta deixou de ser erro por si só — passou a depender de haver, ou não, cartão no lugar dela.
CreditCardAccountID é a SEGUNDA origem possível (Decisão B). Aditivo: ausente, tudo se comporta exatamente como antes desta feature.
DueDate, Competence e PaymentDate são DateOnly (não time.Time): aceitam "AAAA-MM-DD" (Swagger) e RFC3339 (frontend web) — ver date_only.go.
Installments é PONTEIRO para distinguir "ausente" de "1". Os dois
significam à vista, mas só o ponteiro permite recusar installments
enviado junto com conta bancária — silenciar levaria o usuário a crer que
parcelou algo que não foi parcelado (mesma regra que a coluna Parcelas
do CSV tem na spec).
O TETO (24, decisão Q2) NÃO é validado aqui: quem o decide é creditcardrepo.validatePurchaseRequest, via ErrInstallmentsOutOfRange, e duplicar o número neste arquivo criaria duas fontes para o mesmo limite.
Reason é lido SÓ pelo PUT de lançamento de conta bancária (paid-transaction-reversal / T7): obrigatório quando a edição move dinheiro (valor, conta ou tipo de lançamento pago — RN7), ignorado quando não move. O POST de criação o ignora.
Response
{id, warnings?: [{code, message, original_reference_month, target_invoice_id, target_reference_month, target_due_date}]} — warnings omitido quando a compra não foi realocada
The response is of type object.