API Spendint : POST /sn_spend_intg/spendint/invoice

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 6 minutes de lecture
  • Accepte les factures de fournisseurs tiers.

    Si le bon de commande et les lignes de bon de commande sont à l’état Soumission en attente et que les lignes de commande client et de commande client ne sont pas renseignées, l’expédition et la validation de facture du revendeur tiers ne sont pas autorisées. Cela n’est autorisé que lorsque l’état du bon de commande et des lignes de bon de commande sont Commandé. De plus, il n’y a pas de restriction séquentielle sur l’expédition et la publication des factures.

    Une fois qu’une facture est soumise, la facture et ses lignes de facture sont mappées à un bon de commande. Lors d’un mappage réussi, l’état de la facture est défini comme suit :
    • En attente de livraison : lorsqu’il n’existe aucun reçu, la commande est partiellement livrée ou la facture doit être approuvée.
    • Facture confirmée : lorsque le bon de commande est livré et que le montant facturé correspond au montant total du bon de commande.
    • Nécessite une révision : lorsque le bon de commande est livré et que le montant facturé ne correspond pas au montant total du bon de commande.

    Lorsqu’une facture valide est publiée pour un élément de ligne, la même facture ne peut pas être mise à jour.

    Si la facture fournie n’a pas de numéro de bon de commande, la facture est rejetée et un message d’erreur s’affiche indiquant qu’une ou plusieurs des factures fournies n’ont pas de numéro de bon de commande. Si la facture fournie comporte un numéro de bon de commande, mais qu’elle ne correspond pas au bon de commande ou qu’aucun bon de commande n’existe, un message d’erreur s’affiche. Le message indique qu’une ou plusieurs factures n’ont pas de bon de commande correspondant qui correspond au numéro de bon de commande de la facture. De même, si le montant facturé envoyé par le revendeur tiers ne correspond pas au montant facturé, la facture est rejetée.

    Tables d’état

    Pour connaître l’état de la demande de facture, effectuez un appel REST dans la base de données à l’aide de l’API REST de tableServiceNow. La réponse de l’API répertorie les enregistrements pour lesquels la création de la facture a échoué. Pour une réponse de facture, interrogez la table d’erreurs de facturation avec le paramètre suivant :

    sysparm_query=outbound_error.supplier_id=<supplier_id>^outbound_error.state=20

    Les détails sur l’ID client, l’ID du fournisseur, le type d’erreur, l’ID unique de l’ensemble de données à importer et l’état se trouvent dans la table État sortant, qui est la table d’erreurs parente.

    Format d’URL

    /api/sn_spend_intg/spendint/invoice

    Paramètres de demande pris en charge

    Tableau 1. Paramètres de chemin d’accès
    Nom Description
    Aucune
    Tableau 2. Paramètres de requête
    Nom Description
    Mode Prise en charge des modes asynchrone et synchrone pour l’intégration tierce.

    Type de données : chaîne

    Valeurs valides :
    • async : mode asynchrone.
    • sync : mode synchrone.

    Valeur par défaut : asynchrone

    Tableau 3. Paramètres du corps de la demande (XML ou JSON)
    Nom Description
    currency Requis. Devise pour le sous-total, les taxes et l’expédition. Le sous-total, les taxes et les frais d’expédition doivent être dans la même devise.

    Type de données : chaîne

    Longueur maximale : 40

    customer_id Identificateur du client.

    Type de données : chaîne

    Longueur maximale : 100

    Réductions Remises appliquées à la facture. Il s’agit d’un champ modifiable.

    Type de données : chaîne

    Longueur maximale : 100

    invoice_date Requis. Date à laquelle le client a été facturé.

    Type de données : chaîne

    Longueur maximale : 40

    Format : JJ-MM-AAAA

    invoice_lines Liste des objets qui définissent les lignes qui sont facturées pour les achats au sein de cette commande.

    Type de données : tableau

    "invoice_lines": [
      {
        "invoiced_line_amount": "String",
        "invoiced_quantity": "String",
        "line_number": "String",
        "supplier_invoice_line_number": "String",
        "sales_order_line_number": "String"
      }
    ]
    invoice_lines.montant_ligne_facturé Requis. Coût total, hors taxes et frais d’expédition, facturé à un client pour une ligne de bon de commande donnée.

    Type de données : chaîne

    Longueur maximale : 40

    invoice_lines.quantité_facturée Requis. Quantité de biens ou de services qui sont facturés à un client.

    Type de données : chaîne

    Longueur maximale : 40

    invoice_lines.numéro_ligne Requis. Numéro de la ligne de bon de commande généré par le client pour un achat particulier.

    Type de données : chaîne

    Longueur maximale : 40

    invoice_lines. numéro_ligne_commande_ventes Requis. Numéro de ligne de commande client généré par le fournisseur.

    Type de données : chaîne

    Longueur maximale : 40

    invoice_lines. numéro_ligne_facture_fournisseur Requis. Numéro d’identification généré par un fournisseur pour cette ligne de facture.

    Type de données : chaîne

    Longueur maximale : 100

    other_charges Autres frais supplémentaires associés à la facture. Il s’agit d’un champ modifiable.

    Type de données : chaîne

    Longueur maximale : 100

    order_number Requis. Numéro de bon de commande fourni par le client pour cette commande.

    Type de données : chaîne

    Longueur maximale : 40

    remit_to_address Requis. Emplacement auquel un paiement est effectué.

    Type de données : chaîne

    Longueur maximale : 1000

    sales_order_number Requis. Nombre ou valeur générée par le fournisseur pour cette commande.

    Type de données : chaîne

    Longueur maximale : 40

    expédition Requis. Coût d’expédition total pour l’achat complet.

    Type de données : chaîne

    Longueur maximale : 40

    Sous-total Requis. Montant total à payer au fournisseur, à l’exclusion des taxes et des frais d’expédition.

    Type de données : chaîne

    Longueur maximale : 40

    supplier_id Requis. Identificateur du revendeur ou du fournisseur auprès duquel le client peut passer des commandes.

    Type de données : chaîne

    Longueur maximale : 100

    supplier_invoice_number Requis. Numéro d’identification généré par un fournisseur pour cette facture.

    Type de données : chaîne

    Longueur maximale : 100

    supplier_tax_id Identificateur fiscal associé au revendeur tiers. Il s’agit d’un champ modifiable.

    Type de données : chaîne

    Longueur maximale : 100

    taxe Requis. Montant total des taxes facturées pour l’achat.

    Type de données : chaîne

    Longueur maximale : 40

    tax_rate Pourcentage du taux d’imposition appliqué à la commande. Il s’agit d’un champ modifiable.

    Type de données : chaîne

    Longueur maximale : 100

    third_party_import_id Identificateur qui permet à un tiers de transmettre une valeur de chaîne pour identifier de manière unique un ensemble de données importées.

    Type de données : chaîne

    Longueur maximale : 100

    total_amount_invoiced Requis. Montant total à payer au fournisseur, y compris les taxes et les frais d’expédition.

    Type de données : chaîne

    Longueur maximale : 40

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte.

    Tableau 4. En-têtes de demandes
    En-tête Description
    Accepter Format des données du corps de la réponse. Types pris en charge : application/json ou application/xml.

    Par défaut : application/json

    Remarque :
    Seul le format de données est pris en charge pour Procurement application/json Integration Framework.
    Tableau 5. En-têtes de réponses
    En-tête Description
    Aucune

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP.

    Tableau 6. Codes d'état
    Code d'état Description
    réussite Réussi. La demande a été traitée avec succès.
    échec En échec. La demande a été traitée avec des erreurs.

    Paramètres du corps de réponse (JSON)

    Ces paramètres de corps de réponse sont reçus lorsqu’ils sont interrogés en mode synchrone.
    Nom Description
    error_response_body Description des erreurs, répertoriées par numéro de ligne de commande, numéro de commande, numéro de facture du fournisseur, numéro de ligne de facture du fournisseur et message d’erreur.

    Type de données : tableau

    error_response_body.message_erreur Message d’erreur détaillé.

    Type de données : chaîne

    status_code État de la réponse tel que « réussite » ou « échec ».

    Type de données : chaîne

    Demande cURL

    curl "https://instance.service-now.com/api/sn_spend_intg/spendint/invoice" \
    --request POST \
    --header "Accept:application/json" \
    --user 'username':'password'
    {"root":[{
      "customer_id": "Customer - A",
      "supplier_id": "SUP-123456",
      "third_party_import_id": "undefined",
      "supplier_invoice_number": "QAAP89873220071",
      "supplier_tax_id": "TIN000000",
      "order_number": "POL7987633",
      "sales_order_number": "SO0000000081",
      "invoice_date": "YYYY-MM-DD",
      "subtotal": "6000",
      "tax_rate": "10%",
      "tax": "600",
      "shipping": "120",
      "other_charges": "100",
      "discounts": "200",
      "total_amount_invoiced": "6620",
      "remit_to_address": "1640 Camino Del Rio North #202, San Diego,CA",
      "currency": "USD",
      "invoice_lines": [
        {
          "supplier_invoice_line_number": "QA789A867877ABN32251",
          "line_number": "POL587667",
          "sales_order_line_number": "SOL00000081",
          "invoiced_quantity": "45",
          "invoiced_line_amount": "4000"
        },
        {
          "line_number": "POL587668",
          "supplier_invoice_line_number": "78987323",
          "sales_order_line_number": "SOL98769",
          "invoiced_quantity": "12",
          "invoiced_line_amount": "2000"
        }
      ]
    }
    ]}

    Réponses possibles :

    // Success response:
    {
        "result": {
            "response": "success"
        }
    }
    
    // Error response:
    {
        "result": {
            "response": [
                {
                    "customer_id": "Customer - A",
                    "supplier_id": "SUP-123456",
                    "third_party_import_id": "undefined",
                    "status_code": "failure",
                    "error_response_body": [
                        {
                            "sales_order_line_number": "SOL00000081",
                            "sales_order_number": "SO0000000081",
                            "supplier_invoice_number": "QAAP89873220071",
                            "supplier_invoice_line_number": "QA789A867877ABN32251",
                            "error_message": "The invoice do not have a corresponding purchase order which matches the purchase order number of the invoice provided\n"
                        }
                    ]
                }
            ]
        }
    }