Créer un compte de trésorerie

Dans certains cas il est nécessaire de créer un compte pour les flux de trésorerie intermédiaires. Par exemple dans le cas des virements Stripe, ceux-ci ne correspondent pas aux factures payées et lorsque les virements correspondent à des ensembles de factures il devient très compliqué de les rapprocher.

Dans ce cas, il est interessant de créer un compte de trésorerie "Stripe" où stocker toutes les transactions en détails : une transaction pour le paiement exact de la facture, une transaction pour les frais prélevés, et une transaction pour le virement vers le compte bancaire. Le rapprochement bancaire devient alors simple et automatisable.

Création d'un compte de trésorerie

Pour créer un compte de flux il faudra fournir un nom (name), la balance (balance_amount) de votre compte ainsi que son type, il existe plusieurs types (account_type) mais les plus probables sont : Compte courant (checking), Carte bancaire (card), Compte épargne (savings).

var myHeaders = new Headers();

myHeaders.append("Authorization", "Bearer <token>");

var formdata = new FormData();

formdata.append("name", "Nom de mon compte");
formdata.append("type", "bank");
formdata.append("account_type", "card"); // checking, card, savings
formdata.append("balance_amount", "10000"); // Solde du compte * 100

var requestOptions = {
		method: 'POST',
		headers: myHeaders,
		body: formdata,
		redirect: 'follow'
};

fetch("https://api.sinao.app/v1/apps/:appId/cashflowsources", requestOptions)
		.then(response => response.text())
		.then(result => console.log(result))
		.catch(error => console.log('error', error));

Création des transactions bancaires

Chaque compte de trésorerie peut contenir des transactions, ce qui caractérise une transaction et son label (label), son montant (amount) ainsi que sa date de réception (received_at). Pour lier une transaction avec un compte de trésorerie il faut fournir l'identifiant du compte de trésorerie (cashflow_source_id). D'autres informations facultatives peuvent être l'identifiant de l'entreprise (contact_organization_id) ou de la personne (contact_person_id) que vous voulez lier à cette transaction, la méthode (method) qui peut être : check, transfer, cash, creditcard, automatic_debit, creditnote.

var myHeaders = new Headers();

myHeaders.append("Authorization", "Bearer <token>");

var formdata = new FormData();

formdata.append("cashflow_source_id", "15"); // ID de votre compte de trésorerie
formdata.append("contact_organization_id", "3");
// formdata.append("contact_person_id", "7");
formdata.append("label", "Stripe fees Invoice AFBBBD63-0005");
formdata.append("amount", "38"); // Montant * 100
formdata.append("received_at", "2021-01-26T00:00:00Z");
formdata.append("method", "check"); // check, transfer, cash, creditcard, automatic_debit, creditnote

var requestOptions = {
		method: 'POST',
		headers: myHeaders,
		body: formdata,
		redirect: 'follow'
};

fetch("https://api.sinao.app/v1/apps/:appId/transactions", requestOptions)
		.then(response => response.text())
		.then(result => console.log(result))
		.catch(error => console.log('error', error));

Création d'un Payment pour faire le rapprochement bancaire entre les factures et les transactions

Il est possible d'effectuer une reconciliation entre une facture d'achat, une facture de vente ou une transaction (type) avec un mouvement (movements).

Le mouvement (movements) peut être de type :

  • account : Compte comptable
  • purchase : Une facture d'achat
  • sales : Une facture de vente
  • bank_entry : Une transaction bancaire
  • cashdesk_entry : Une rentrée d'argent en liquide via une caisse
  • waiting_entry : Un chèque qui n'a pas encore été encaissé ou une transaction en carte bleu qui n'apparaît pas encore dans la banque

Suivant le type du mouvement que vous avez définit, vous devez fournir l'identifiant (id) de votre mouvement ainsi que le montant (amount) correspondant.

type: [transaction, sales, purchase]
id: "Transaction, sales invoice or purchase invoice id to reconcile"
movements: "List of objects to reconcile with the parent object. The parent object and the children must be different, a transaction cannot be reconciled with another transaction. In this type of case, for example where a transaction was immediately refunded without going through an invoice, the transactions must be categorized in the same account"
paid_at
rule

var myHeaders = new Headers();

myHeaders.append("Authorization", "Bearer <token>");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "type": "sales", // transaction, sales, purchase
  "id": 169, // ID transaction, ID sale, ID purchase
  "movements": [
    {
      "type": "transaction", // account, purchase, sales, bank_entry, cashdesk_entry, waiting_entry
      "id": 31, // ID de la transaction
      "amount": 1500 // Montant * 100
    }
  ]
});

var requestOptions = {
		method: 'POST',
		headers: myHeaders,
		body: raw,
		redirect: 'follow'
};

fetch("https://api.sinao.app/v1/apps/:appId/reconcile", requestOptions)
		.then(response => response.text())
		.then(result => console.log(result))
		.catch(error => console.log('error', error));