Journal Entries API
Endpoints pour accéder aux écritures comptables (journal général, achats, ventes, trésorerie).
Lister les écritures comptables
GET /v1/public-api/journal-entries
Scope requis: read:accounting
Paramètres de requête
| Paramètre | Type | Description |
|---|
page | number | Numéro de page (défaut: 1) |
limit | number | Éléments par page (défaut: 20, max: 100) |
dateFrom | string | Date de début (ISO 8601) |
dateTo | string | Date de fin (ISO 8601) |
journalType | string | Type de journal |
status | string | Statut de l'écriture |
Exemple de requête
curl -X GET "https://api.nerpsuite.com/v1/public-api/journal-entries?dateFrom=2024-01-01&dateTo=2024-01-31&journalType=VENTES&status=POSTED" \
-H "X-API-Key: sk_live_xxx"
Réponse
{
"data": [
{
"id": "je_001",
"entryNumber": "JV-2024-000045",
"journalType": "VENTES",
"entryDate": "2024-01-25T00:00:00Z",
"description": "Vente ORD-2024-001234 - Jean Dupont",
"status": "POSTED",
"lines": [
{
"lineNumber": 1,
"accountId": "acc_411",
"debit": 2257.64,
"credit": 0,
"description": "Client Jean Dupont"
},
{
"lineNumber": 2,
"accountId": "acc_707",
"debit": 0,
"credit": 1898.00,
"description": "Vente de marchandises"
},
{
"lineNumber": 3,
"accountId": "acc_4457",
"debit": 0,
"credit": 359.64,
"description": "TVA collectée 18%"
}
],
"createdAt": "2024-01-25T10:30:05Z"
}
],
"total": 156,
"page": 1,
"limit": 20,
"totalPages": 8
}
Obtenir une écriture comptable
GET /v1/public-api/journal-entries/:id
Scope requis: read:accounting
Paramètres de chemin
| Paramètre | Type | Description |
|---|
id | string | ID de l'écriture |
Exemple de requête
curl -X GET "https://api.nerpsuite.com/v1/public-api/journal-entries/je_001" \
-H "X-API-Key: sk_live_xxx"
Réponse
Même format que dans la liste, mais pour une seule écriture.
Types de journal
| Type | Description |
|---|
GENERAL | Journal général |
VENTES | Journal des ventes |
ACHATS | Journal des achats |
TRESORERIE | Journal de trésorerie |
Statuts d'écriture
| Statut | Description |
|---|
DRAFT | Brouillon |
PENDING_APPROVAL | En attente de validation |
POSTED | Comptabilisée |
CANCELLED | Annulée |
Champs de réponse
Écriture comptable
| Champ | Type | Description |
|---|
id | string | Identifiant unique |
entryNumber | string | Numéro d'écriture |
journalType | string | Type de journal |
entryDate | string | Date de l'écriture (ISO 8601) |
description | string | Libellé de l'écriture |
status | string | Statut |
lines | array | Lignes d'écriture (débit/crédit) |
createdAt | string | Date de création (ISO 8601) |
Ligne d'écriture
| Champ | Type | Description |
|---|
lineNumber | number | Numéro de ligne |
accountId | string | ID du compte comptable |
debit | number | Montant au débit |
credit | number | Montant au crédit |
description | string | Libellé de la ligne |
Cas d'usage
Exporter les écritures pour Power BI
async function exportJournalEntries(dateFrom, dateTo) {
let allEntries = [];
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await fetch(
`/v1/public-api/journal-entries?dateFrom=${dateFrom}&dateTo=${dateTo}&status=POSTED&page=${page}&limit=100`,
{ headers: { 'X-API-Key': apiKey } }
);
const result = await response.json();
allEntries = allEntries.concat(result.data);
hasMore = page < result.totalPages;
page++;
}
return allEntries;
}
Calculer la balance par compte
async function getAccountBalances(dateFrom, dateTo) {
const entries = await exportJournalEntries(dateFrom, dateTo);
const balances = {};
for (const entry of entries) {
for (const line of entry.lines) {
if (!balances[line.accountId]) {
balances[line.accountId] = { debit: 0, credit: 0 };
}
balances[line.accountId].debit += line.debit;
balances[line.accountId].credit += line.credit;
}
}
return Object.entries(balances).map(([accountId, b]) => ({
accountId,
debit: b.debit,
credit: b.credit,
balance: b.debit - b.credit
}));
}
Analyse des ventes vs achats
async function getSalesVsPurchases(dateFrom, dateTo) {
const [sales, purchases] = await Promise.all([
fetch(`/v1/public-api/journal-entries?dateFrom=${dateFrom}&dateTo=${dateTo}&journalType=VENTES&status=POSTED`, {
headers: { 'X-API-Key': apiKey }
}).then(r => r.json()),
fetch(`/v1/public-api/journal-entries?dateFrom=${dateFrom}&dateTo=${dateTo}&journalType=ACHATS&status=POSTED`, {
headers: { 'X-API-Key': apiKey }
}).then(r => r.json())
]);
return {
salesEntries: sales.total,
purchaseEntries: purchases.total
};
}