comptabilité pennylane

pennylane

comptabilité pennylane.

lecture comptable pennylane : factures clients et fournisseurs, transactions bancaires, balance sur période, plan comptable, exercices fiscaux, catégories — et lettrage transaction ↔ facture.

ajouter à otoauth : api key (per-user)prefix : pennylane_*

setup & usage

⚠ your pennylane api key

each user sets their own pennylane key — your books are visible only to you.

  • sign in at app.pennylane.com
  • go to settings, api / integrations section, and create an api key (personal token)
  • paste it into your oto connector keys under pennylane
  • ▸ read and reconcile your books

    query invoices, transactions and the trial balance, and settle unmatched payments.

  • pennylane_trial_balance the trial balance over a period, pennylane_ref(kind="ledger_accounts") the chart of accounts
  • pennylane_invoice(op="list") / pennylane_supplier_invoice(op="list") the invoices, pennylane_transactions the bank movements
  • pennylane_match matches a transaction to its invoice (reversible) so a paid invoice isn't left as late
  • quotes: pennylane_quote(op="create") (no draft: it is born pending) → op="pdf" for the PDF link to attach to an email (the link expires, re-read it just before sending) → op="set_status" (accepted on signature) → op="to_invoice" creates the invoice as a draft, which pennylane_invoice(op="finalize") then pennylane_act(op="send_invoice") issue after human validation
  • supplier invoices: pennylane_upload_file (the PDF) → pennylane_supplier_invoice(op="import") (with import_as_incomplete=true, it stays in validation_needed) → op="lines" (the line ids and vat_rates) → op="update" (label, dates, amounts, and invoice_lines={"update": [{"id": …, "vat_rate": …}]}) → op="validate" moves it to complete: a binding accounting entry, only on the user's explicit request, never right after an import
  • supplier invoice amounts: the pre-tax total (currency_amount_before_tax) is required at invoice level and rejected inside a line; a line carries currency_amount (incl. tax) and currency_tax
  • reverse-charge vat_rate (v2 reference): intracom_21, intracom_55, intracom_85, intracom_100, extracom, crossborder, FR_85_construction, FR_100_construction, FR_200_construction; the reference doesn't define them any further and has no intracom_200 — the right code is decided with the accountant
  • analytics: pennylane_ref(kind="category_groups") the axes, kind="categories" their categories → op="categories" reads, op="categorize" REPLACES the categories of a customer invoice, a supplier invoice (invoice_id) or a ledger entry line (pennylane_ledger_entry, line_id); weights as strings, summing to 1 per axis; [] removes them all
  • several pennylane instances in an org (personal and company): without _instance, the personal key answers first — to quote or invoice on behalf of the company, pass _instance="org:<id>:pennylane"
  • supervised credit-note flow: pennylane_ref(kind="products") (resolve the product_id, never guess it) → pennylane_invoice(op="find") (duplicate check) → pennylane_invoice(op="credit_note") (standalone draft, lines in positive — the "credit note" negation is applied server-side) → pennylane_invoice(op="finalize") then pennylane_act(op="send_invoice") after human validation
  • · project scope (#605, 2026-08-29)

    pennylane_upload_file with a {kind: "url"} source reads that url server-side: under a project with excluded_url_prefixes, a matching url is refused, naming the reason (file_source seam). details: docs/projects.md.

    ⚙ multiple comptes

    this connector accepts multiple comptes: each stored credential becomes a named account (one name per compte), at your level, your team's or your org's.

  • the first one doesn't need a name; from the second on, each one carries its own (the first then takes the name "principal", renamable)
  • without specification, the agent takes the only stored compte, otherwise the one marked as default; otherwise the call is refused, naming the available comptes — never a random choice
  • target a compte for a call: _account="<name>" on the tool; list them: oto_identity(op='list', connector='pennylane') (scope='org' or scope='group' for the org's or team's)
  • set the default: oto_identity(op='set', connector='pennylane', identity_id='<name>'); rename: op='rename' with new_name
  • ⚠️ no tool walks through the comptes on its own: a total across several comptes is obtained by calling each one (_account) and adding up
  • outils

    chargement…

    utilisation

    claude code — installe le plugin oto — claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.
    claude.ai — branche mcp.oto.cx/mcp en connecteur custom (guide)
    cli — pipx install oto-cli puis oto pennylane …