API Spendint - POST /sn_spend_intg/spendint/invoice

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 6 minutes de lecture
  • Accepte les factures de fournisseurs tiers.

    Si le bon de commande et les lignes qu'il comprend sont dans l'état Soumission en attente et que la commande client et les lignes qu'elle comprend ne sont pas renseignées, la validation de l'expédition et de la facture du revendeur tiers ne sera pas autorisée. Elle n'est autorisée que lorsque l'état du bon de commande et des lignes qu'il comprend sont dans l'état Commandé. En outre, il n'existe aucune restriction séquentielle sur la validation de l'expédition et de la facture.

    Lors de son envoi, une facture (et les lignes qu'elle comprend) est mappée vers un bon de commande. Lorsqu'un mappage est réussi, l'état de la facture est défini comme suit :
    • Livraison en attente : lorsqu'aucun reçu n'existe, la commande est partiellement livrée ou la facture requiert une approbation.
    • Facture confirmée : lorsque le bon de commande est livré et que le montant facturé correspond au montant total du bon de commande.
    • Revue nécessaire : lorsque le bon de commande est livré et que le montant facturé ne correspond pas au montant total du bon de commande.

    Une facture valide publiée pour un élément de ligne ne peut pas être mise à jour.

    Si la facture fournie ne comporte aucun numéro de bon de commande, elle est rejetée et un message d'erreur indique qu'une ou plusieurs des factures fournies ne comportent pas de numéro de bon de commande. Si la facture fournie comporte un numéro de bon de commande, mais que le bon de commande ne correspond pas ou n'existe pas, un message d'erreur s'affiche. Le message indique le numéro du bon de commande spécifié sur une ou plusieurs factures ne correspond pas. En outre, si le montant facturé envoyé par le revendeur tiers ne correspond pas au montant facturé, la facture est rejetée.

    Tables d'états

    Pour connaitre l'état de la demande de facture, effectuez un appel REST dans la base de données ServiceNow à l'aide de l'API REST Table. La réponse de l'API répertorie les enregistrements dans lesquels la demande de création de facture a échoué. Pour obtenir la réponse de facture, interrogez la table d'erreurs de facture à l'aide du paramètre suivant :

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

    Les informations sur l'ID client, l'ID du fournisseur, le type d'erreur, l'ID de jeu d'importation unique 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
    Aucun
    Tableau 2. Paramètres de requête
    Nom Description
    mode Prise en charge des modes asynchrones et synchrones pour les intégrations tierces.

    Type de données : chaîne

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

    Valeur par défaut : async

    Tableau 3. Paramètres de corps de demande (XML ou JSON)
    Nom Description
    devise Requis. Devise du sous-total, des taxes et des coûts d'expédition. Le sous-total, les taxes et les coûts d'expédition doivent être exprimés 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

    discounts Remises appliquées à la facture. Ce champ est 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 : AAAA-MM-JJ

    invoice_lines Liste d'objets qui définissent les lignes facturées pour les achats dans 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.invoiced_line_amount Requis. Coût total, hors taxes et coûts 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.invoiced_quantity Requis. Quantité de biens ou de services pour lesquels un client est facturé.

    Type de données : chaîne

    Longueur maximale : 40

    invoice_lines.line_number Requis. Numéro de 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.sales_order_line_number 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.supplier_invoice_line_number 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. Ce champ est 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 : 1 000

    sales_order_number Requis. Numéro ou valeur généré(e) par le fournisseur pour cette commande.

    Type de données : chaîne

    Longueur maximale : 40

    shipping Requis. Coût total d'expédition pour l'ensemble de l'achat.

    Type de données : chaîne

    Longueur maximale : 40

    subtotal Requis. Montant total à payer au fournisseur, hors taxes et 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. Ce champ est modifiable.

    Type de données : chaîne

    Longueur maximale : 100

    tax 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. Ce champ est modifiable.

    Type de données : chaîne

    Longueur maximale : 100

    third_party_import_id Identificateur permettant à 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 à cette action HTTP uniquement ou s'appliquent à cette action d'une manière distincte.

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

    Valeur par défaut : application/json

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

    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é correctement traitée.
    échec En échec. La demande présente des erreurs de traitement.

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

    Les paramètres de corps de réponse suivants sont reçus lors d'une interrogation en mode synchrone.
    Nom Description
    error_response_body Description des erreurs, répertoriées par numéro de ligne de commande client, numéro de bon 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.error_message 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"
                        }
                    ]
                }
            ]
        }
    }