Aller au contenu

Purchases

Suppliers, purchase invoices and purchase requests.

Bases: SyncAPIResource

Manage suppliers.

list

list(
    *,
    cursor: str | None = None,
    limit: int | None = None,
    filter: FiltersInput | None = None,
    sort: str | None = None,
) -> SyncCursorPage[Supplier]

List suppliers.

Scope: suppliers:readonly. Reference: https://pennylane.readme.io/reference/getsuppliers

Parameters:

Name Type Description Default
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page (1-100, API default 20).

None
filter FiltersInput | None

Conditions built with :mod:pennylane_sdk.filters.

None
sort str | None

Sort field, prefixed with - for descending (default -id).

None

create

create(
    *,
    name: str,
    establishment_no: str | None = None,
    reg_no: str | None = None,
    postal_address: dict[str, Any] | None = None,
    vat_number: str | None = None,
    ledger_account: dict[str, Any] | None = None,
    emails: list[str] | None = None,
    iban: str | None = None,
    supplier_payment_method: str | None = None,
    supplier_due_date_delay: int | None = None,
    supplier_due_date_rule: str | None = None,
    external_reference: str | None = None,
) -> Supplier

Create a supplier.

Scope: suppliers:all. Reference: https://pennylane.readme.io/reference/postsupplier

Parameters:

Name Type Description Default
name str

Supplier name.

required
establishment_no str | None

SIRET (14-digit French establishment number).

None
reg_no str | None

SIREN (9-digit French registration number).

None
postal_address dict[str, Any] | None

{"address", "postal_code", "city", "country_alpha2"}.

None
vat_number str | None

VAT number.

None
ledger_account dict[str, Any] | None

{"number": <ledger account number>}.

None
emails list[str] | None

Email addresses.

None
iban str | None

Supplier IBAN.

None
supplier_payment_method str | None

One of automatic_transfer, manual_transfer, automatic_debiting, bill_of_exchange, check, cash, card, other.

None
supplier_due_date_delay int | None

Number of days before payment is due.

None
supplier_due_date_rule str | None

days or days_or_end_of_month.

None
external_reference str | None

Your own unique reference (auto-assigned if omitted).

None

get

get(supplier_id: int) -> Supplier

Retrieve a supplier by its Pennylane identifier.

Scope: suppliers:readonly. Reference: https://pennylane.readme.io/reference/getsupplier

update

update(
    supplier_id: int,
    *,
    name: str | None = None,
    establishment_no: str | None = None,
    reg_no: str | None = None,
    postal_address: dict[str, Any] | None = None,
    vat_number: str | None = None,
    emails: list[str] | None = None,
    iban: str | None = None,
    supplier_payment_method: str | None = None,
    supplier_due_date_delay: int | None = None,
    supplier_due_date_rule: str | None = None,
    external_reference: str | None = None,
) -> Supplier

Update a supplier. Only the provided fields are modified.

Scope: suppliers:all. Reference: https://pennylane.readme.io/reference/putsupplier

list_categories

list_categories(
    supplier_id: int,
    *,
    cursor: str | None = None,
    limit: int | None = None,
) -> SyncCursorPage[SupplierCategory]

List the categories assigned to a supplier.

Scope: suppliers:readonly. Reference: https://pennylane.readme.io/reference/getsuppliercategories

categorize

categorize(
    supplier_id: int, *, categories: list[dict[str, Any]]
) -> None

Replace the categories assigned to a supplier.

Scope: suppliers:all. Reference: https://pennylane.readme.io/reference/putsuppliercategories

Parameters:

Name Type Description Default
categories list[dict[str, Any]]

List of {"id": <category id>, "weight": <str fraction, e.g. "0.6575">}.

required

Bases: SyncAPIResource

Manage supplier invoices (French: factures d'achat).

list

list(
    *,
    cursor: str | None = None,
    limit: int | None = None,
    filter: FiltersInput | None = None,
    sort: str | None = None,
) -> SyncCursorPage[SupplierInvoice]

List supplier invoices.

Scope: supplier_invoices:readonly. Reference: https://pennylane.readme.io/reference/getsupplierinvoices

Parameters:

Name Type Description Default
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page (1-100, API default 20).

None
filter FiltersInput | None

Conditions built with :mod:pennylane_sdk.filters.

None
sort str | None

Sort field, prefixed with - for descending (default -id).

None

get

get(supplier_invoice_id: int) -> SupplierInvoice

Retrieve a supplier invoice by its Pennylane identifier.

Scope: supplier_invoices:readonly. Reference: https://pennylane.readme.io/reference/getsupplierinvoice

update

update(
    supplier_invoice_id: int,
    *,
    supplier_id: int | None = None,
    date: date | str | None = None,
    deadline: date | str | None = None,
    invoice_number: str | None = None,
    label: str | None = None,
    currency: str | None = None,
    currency_amount_before_tax: MoneyInput | None = None,
    currency_amount: MoneyInput | None = None,
    amount: MoneyInput | None = None,
    currency_tax: MoneyInput | None = None,
    tax: MoneyInput | None = None,
    transaction_reference: dict[str, Any] | None = None,
    invoice_lines: dict[str, Any] | None = None,
    external_reference: str | None = None,
) -> SupplierInvoice

Update a supplier invoice. Only the provided fields are modified.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/putsupplierinvoice

Parameters:

Name Type Description Default
transaction_reference dict[str, Any] | None

{"banking_provider", "provider_field_name", "provider_field_value"} to auto-reconcile with a bank transaction.

None
invoice_lines dict[str, Any] | None

{"create": [...], "update": [...], "delete": [...]}.

None

import_from_file

import_from_file(
    *,
    file_attachment_id: int,
    supplier_id: int,
    date: date | str,
    deadline: date | str,
    currency_amount_before_tax: MoneyInput,
    currency_amount: MoneyInput,
    currency_tax: MoneyInput,
    invoice_lines: list[dict[str, Any]],
    import_as_incomplete: bool | None = None,
    invoice_number: str | None = None,
    currency: str | None = None,
    amount: MoneyInput | None = None,
    tax: MoneyInput | None = None,
    label: str | None = None,
    transaction_reference: dict[str, Any] | None = None,
    external_reference: str | None = None,
) -> SupplierInvoice

Import a supplier invoice from a previously uploaded file attachment.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/importsupplierinvoice

Parameters:

Name Type Description Default
file_attachment_id int

ID of a file uploaded through /file_attachments.

required
import_as_incomplete bool | None

Set the invoice to Incomplete status.

None
invoice_lines list[dict[str, Any]]

Invoice lines, each a dict of invoice line fields (label, description, currency_amount, currency_tax, ledger_account_id, vat_rate, imputation_dates, ledger_entry_line...).

required
transaction_reference dict[str, Any] | None

{"banking_provider", "provider_field_name", "provider_field_value"} to auto-reconcile with a bank transaction.

None

import_e_invoice

import_e_invoice(
    *,
    file: FileInput,
    filename: str | None = None,
    invoice_options: dict[str, Any] | None = None,
) -> SupplierEInvoiceImportResult

Import a supplier e-invoice file (Factur-X PDF, UBL XML or CII XML).

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/createsupplierinvoiceeinvoiceimport

Parameters:

Name Type Description Default
file FileInput

The e-invoice file (path, bytes or file-like object).

required
filename str | None

Overrides the filename sent to the API.

None
invoice_options dict[str, Any] | None

Optional payload to enrich the imported invoice: {"supplier_id": ..., "invoice_lines": [{"e_invoice_line_id", "ledger_account_id"}, ...]}.

None

validate_accounting

validate_accounting(
    supplier_invoice_id: int,
) -> SupplierInvoice

Validate the accounting of a supplier invoice.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/validateaccountingsupplierinvoice

update_payment_status

update_payment_status(
    supplier_invoice_id: int, *, payment_status: str
) -> None

Update the payment status of a supplier invoice.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/updatesupplierinvoicepaymentstatus

Parameters:

Name Type Description Default
payment_status str

"paid" or "to_be_paid".

required

update_e_invoice_status

update_e_invoice_status(
    supplier_invoice_id: int,
    *,
    status: str,
    reason: str | None = None,
) -> SupplierInvoice

Update the e-invoice lifecycle status of a supplier invoice.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/putsupplierinvoiceeinvoicestatus

The request body is a oneOf of three variants:

  • Dispute (status="disputed"): requires reason from the dispute set (incorrect_vat_rate, incorrect_unit_prices, incorrect_billed_quantity, incorrect_billed_item, defective_delivered_item, delivery_issue, bank_details_error, incorrect_payment_terms, missing_legal_notice, missing_contractual_reference, recipient_error).
  • Refuse (status="refused"): requires reason from the refuse set (incorrect_vat_rate, contract_completed, duplicate_invoice, recipient_error, incorrect_prices, non_compliant_invoice).
  • Undispute (status="approved"): no reason.

Parameters:

Name Type Description Default
status str

"disputed", "refused" or "approved".

required
reason str | None

Required for "disputed" and "refused".

None

list_invoice_lines

list_invoice_lines(
    supplier_invoice_id: int,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    sort: str | None = None,
) -> SyncCursorPage[InvoiceLine]

List the invoice lines of a supplier invoice.

Scope: supplier_invoices:readonly. Reference: https://pennylane.readme.io/reference/getsupplierinvoicelines

list_categories

list_categories(
    supplier_invoice_id: int,
    *,
    cursor: str | None = None,
    limit: int | None = None,
) -> SyncCursorPage[SupplierInvoiceCategory]

List the analytic categories assigned to a supplier invoice.

Scope: supplier_invoices:readonly. Reference: https://pennylane.readme.io/reference/getsupplierinvoicecategories

categorize

categorize(
    supplier_invoice_id: int,
    *,
    categories: list[dict[str, Any]],
) -> builtins.list[SupplierInvoiceCategory]

Replace the analytic categories assigned to a supplier invoice.

Categories may belong to different category groups; the weights of categories from the same group must sum to 1.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/putsupplierinvoicecategories

Parameters:

Name Type Description Default
categories list[dict[str, Any]]

List of {"id": <category_id>, "weight": "<0..1>"} dicts.

required

list_payments

list_payments(
    supplier_invoice_id: int,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    sort: str | None = None,
) -> SyncCursorPage[Payment]

List the payments of a supplier invoice.

Scope: supplier_invoices:readonly. Reference: https://pennylane.readme.io/reference/getsupplierinvoicepayments

list_matched_transactions

list_matched_transactions(
    supplier_invoice_id: int,
    *,
    cursor: str | None = None,
    limit: int | None = None,
    sort: str | None = None,
) -> SyncCursorPage[MatchedTransaction]

List the bank transactions matched to a supplier invoice.

Scope: supplier_invoices:readonly. Reference: https://pennylane.readme.io/reference/getsupplierinvoicematchedtransactions

match_transaction

match_transaction(
    supplier_invoice_id: int, *, transaction_id: int
) -> None

Match a bank transaction to a supplier invoice.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/postsupplierinvoicematchedtransactions

Parameters:

Name Type Description Default
transaction_id int

ID of the transaction to match.

required

unmatch_transaction

unmatch_transaction(
    supplier_invoice_id: int, transaction_id: int
) -> None

Unmatch a bank transaction from a supplier invoice.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/deletesupplierinvoicematchedtransactions

link_purchase_requests(
    supplier_invoice_id: int, *, purchase_request_id: int
) -> None

Link a purchase request to a supplier invoice.

Scope: supplier_invoices:all. Reference: https://pennylane.readme.io/reference/postsupplierinvoicelinkedpurchaserequests

Parameters:

Name Type Description Default
purchase_request_id int

ID of the purchase request to link.

required

Bases: SyncAPIResource

Read and import purchase requests (French: demandes d'achat).

list

list(
    *,
    cursor: str | None = None,
    limit: int | None = None,
    filter: FiltersInput | None = None,
    sort: str | None = None,
) -> SyncCursorPage[PurchaseRequest]

List purchase requests.

Scope: purchase_requests:readonly. Reference: https://pennylane.readme.io/reference/getpurchaserequests

Parameters:

Name Type Description Default
cursor str | None

Pagination cursor from a previous page.

None
limit int | None

Results per page (1-100, API default 20).

None
filter FiltersInput | None

Conditions built with :mod:pennylane_sdk.filters.

None
sort str | None

Sort field, prefixed with - for descending (default -id).

None

get

get(purchase_request_id: int) -> PurchaseRequest

Retrieve a purchase request by its Pennylane identifier.

Scope: purchase_requests:readonly. Reference: https://pennylane.readme.io/reference/getpurchaserequest

import_from_file

import_from_file(
    *,
    file_attachment_id: int,
    reason: str,
    supplier_id: int,
    purchase_order_number: str,
    currency_amount_before_tax: MoneyInput,
    currency_amount: MoneyInput,
    currency_tax: MoneyInput,
    delivery_address: dict[str, Any],
    purchase_request_lines: list[dict[str, Any]],
    estimated_delivery_date: date | str | None = None,
    currency: str | None = None,
    amount: MoneyInput | None = None,
    tax: MoneyInput | None = None,
) -> PurchaseRequest

Import a purchase order from a previously uploaded file attachment.

Scope: purchase_requests:all. Reference: https://pennylane.readme.io/reference/createpurchaserequestimport

Parameters:

Name Type Description Default
file_attachment_id int

ID of a file uploaded through /file_attachments, containing the purchase order to import.

required
reason str

Reason of the purchase request.

required
supplier_id int

Supplier identifier.

required
purchase_order_number str

Purchase order number.

required
delivery_address dict[str, Any]

{"address", "postal_code", "city", "country_alpha2"}.

required
purchase_request_lines list[dict[str, Any]]

Lines, each a dict with currency_amount, currency_tax, label, quantity, unit_price, unit, vat_rate and optionally amount, tax, description.

required
estimated_delivery_date date | str | None

Estimated delivery date (ISO 8601).

None