Collecte de fluides par un opérateur avec transport multi-modal
En cas de transport multi-modal, plusieurs transporteurs peuvent être renseignés dans un ordre donné grâce au champ `transporters`. Les transporteurs signent chacun à leur tour grâce à la mutation `signBsff` (type=TRANSPORT). La liste des transporteurs peut être modifiée par n'importe quel acteur du bordereau tant que le bordereau n'a pas été réceptionné sur l'installation de destination. À noter toutefois qu'un transporteur ne peut plus être modifié ou supprimé dès lors qu'il a signé le bordereau.
  graph LR
  AO(NO STATE) -->|createBsff| A
  A(INITIAL) -->|"signBsff(EMISSION)"| C(SIGNED_BY_PRODUCER)
  C --> |"signBsff(TRANSPORT)"| D(SENT)
  D -->|"signBsff(TRANSPORT)"| E(SENT)
  E -->|"signBsff(TRANSPORT)"| G(SENT)
  G -->|"signBsff(RECEPTION)"|H(RECEIVED)
  H -->|updateBsffPackaging|H
  I(RECEIVED) -->|"signBsff(ACCEPTATION)"|J(ACCEPTED)
  J -->|updateBsffPackaging|K(ACCEPTED)
  K -->|"signBsff(OPERATION)"|L(INTERMEDIATELY_PROCESSED)
  
Crée un premier transporteur qui sera associé au bordereau.
mutation CreateBsffTransporter($input: BsffTransporterInput!) {
  createBsffTransporter(input: $input) {
    id
  }
}
{
  "input": {
    "company": {
      "siret": "SIRET_TRANSPORTEUR_1",
      "vatNumber": null,
      "name": "Transport & Co",
      "address": "1 rue des 6 chemins, 07100 ANNONAY",
      "contact": "Claire Dupuis",
      "mail": "claire.dupuis@transportco.fr",
      "phone": "04 00 00 00 00"
    }
  }
}
Crée un second transporteur qui sera associé au bordereau.
mutation CreateBsffTransporter($input: BsffTransporterInput!) {
  createBsffTransporter(input: $input) {
    id
  }
}
{
  "input": {
    "company": {
      "siret": "SIRET_TRANSPORTEUR_2",
      "vatNumber": null,
      "name": "Transport & Co",
      "address": "1 rue des 6 chemins, 07100 ANNONAY",
      "contact": "Claire Dupuis",
      "mail": "claire.dupuis@transportco.fr",
      "phone": "04 00 00 00 00"
    }
  }
}
Crée un BSFF en associant une liste de transporteurs dans un ordre donné
mutation CreateBsff($input: BsffInput!) {
  createBsff(input: $input) {
    id
    status
    packagings {
      id
    }
  }
}
{
  "input": {
    "type": "COLLECTE_PETITES_QUANTITES",
    "emitter": {
      "company": {
        "siret": "SIRET_OPERATEUR",
        "name": "Les gentlemen du froid",
        "address": "1 rue de paradis, 75010 PARIS",
        "contact": "Le directeur",
        "phone": "01 00 00 00 00",
        "mail": "contact@gentlemandufroid.fr"
      }
    },
    "packagings": [
      {
        "type": "BOUTEILLE",
        "volume": 1,
        "numero": "1",
        "weight": 1
      }
    ],
    "waste": {
      "code": "14 06 01*",
      "description": "R404A",
      "adr": "UN 1078, Gaz frigorifique NSA (Gaz réfrigérant, NSA), 2.2 (C/E)"
    },
    "weight": {
      "value": 1,
      "isEstimate": true
    },
    "destination": {
      "cap": "CAP",
      "plannedOperationCode": "R2",
      "company": {
        "siret": "SIRET_TRAITEUR",
        "name": "Traiteur & Co",
        "address": "1 avenue des roses 67100 Strasbourg",
        "contact": "Thomas Largeron",
        "phone": "03 00 00 00 00",
        "mail": "thomas.largeron@traiteur.fr"
      }
    },
    "transporters": [
      "ID_BSFF_TRANSPORTER_1",
      "ID_BSFF_TRANSPORTER_2"
    ]
  }
}
L'émetteur signe le BSFF
mutation SignBsff($id: ID!, $input: BsffSignatureInput!) {
  signBsff(id: $id, input: $input) {
    id
    status
    packagings {
      id
    }
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "type": "EMISSION",
    "author": "Jean Opérateur"
  }
}
Le premier transporteur met à jour ses informations de signature
mutation UpdateBsffTransporter($id: ID!, $input: BsffTransporterInput!) {
  updateBsffTransporter(id: $id, input: $input) {
    id
  }
}
{
  "id": "ID_BSFF_TRANSPORTER_1",
  "input": {
    "transport": {
      "mode": "ROAD",
      "plates": [
        "abc21cde"
      ],
      "takenOverAt": "2025-10-28T08:39:54.905Z"
    }
  }
}
Le premier transporteur signe le bordereau
mutation SignBsff($id: ID!, $input: BsffSignatureInput!) {
  signBsff(id: $id, input: $input) {
    id
    status
    packagings {
      id
    }
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "type": "TRANSPORT",
    "author": "Jean Transporteur"
  }
}
Le second transporteur met à jour ses informations de signature
mutation UpdateBsffTransporter($id: ID!, $input: BsffTransporterInput!) {
  updateBsffTransporter(id: $id, input: $input) {
    id
  }
}
{
  "id": "ID_BSFF_TRANSPORTER_2",
  "input": {
    "transport": {
      "mode": "ROAD",
      "plates": [
        "abc21cde"
      ],
      "takenOverAt": "2025-10-28T08:39:54.905Z"
    }
  }
}
Le second transporteur signe le bordereau
mutation SignBsff($id: ID!, $input: BsffSignatureInput!) {
  signBsff(id: $id, input: $input) {
    id
    status
    packagings {
      id
    }
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "type": "TRANSPORT",
    "author": "Jean Transporteur"
  }
}
L'installation de destination affrète un troisième transporteur
mutation CreateBsffTransporter($input: BsffTransporterInput!) {
  createBsffTransporter(input: $input) {
    id
  }
}
{
  "input": {
    "company": {
      "siret": "SIRET_TRANSPORTEUR_3",
      "vatNumber": null,
      "name": "Transport & Co",
      "address": "1 rue des 6 chemins, 07100 ANNONAY",
      "contact": "Claire Dupuis",
      "mail": "claire.dupuis@transportco.fr",
      "phone": "04 00 00 00 00"
    }
  }
}
Le troisième transporteur est ajouté sur le bordereau
mutation UpdateBsff($id: ID!, $input: BsffInput!) {
  updateBsff(id: $id, input: $input) {
    id
    status
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "transporters": [
      "ID_BSFF_TRANSPORTER_1",
      "ID_BSFF_TRANSPORTER_2",
      "ID_BSFF_TRANSPORTER_3"
    ]
  }
}
Le troisième transporteur met à jour ses informations de signature
mutation UpdateBsffTransporter($id: ID!, $input: BsffTransporterInput!) {
  updateBsffTransporter(id: $id, input: $input) {
    id
  }
}
{
  "input": {
    "transport": {
      "mode": "ROAD",
      "plates": [
        "abc21cde"
      ],
      "takenOverAt": "2025-10-28T08:39:54.905Z"
    }
  }
}
Le troisième transporteur signe le bordereau
mutation SignBsff($id: ID!, $input: BsffSignatureInput!) {
  signBsff(id: $id, input: $input) {
    id
    status
    packagings {
      id
    }
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "type": "TRANSPORT",
    "author": "Jean Transporteur"
  }
}
Les informations sur la réception sont complétées
mutation UpdateBsff($id: ID!, $input: BsffInput!) {
  updateBsff(id: $id, input: $input) {
    id
    status
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "destination": {
      "reception": {
        "date": "2022-11-03"
      }
    }
  }
}
Le destinataire signe la réception du BSFF
mutation SignBsff($id: ID!, $input: BsffSignatureInput!) {
  signBsff(id: $id, input: $input) {
    id
    status
    packagings {
      id
    }
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "type": "RECEPTION",
    "author": "Jean Transit"
  }
}
Les informations sur l'acceptation du contenant sont complétées
mutation UpdateBsffPackaging($id: ID!, $input: UpdateBsffPackagingInput!) {
  updateBsffPackaging(id: $id, input: $input) {
    id
    acceptation {
      date
    }
    operation {
      date
    }
  }
}
{
  "id": "ID_PACKAGING_1",
  "input": {
    "acceptation": {
      "date": "2022-11-04",
      "weight": 1,
      "status": "ACCEPTED",
      "wasteCode": "14 06 01*",
      "wasteDescription": "R404A"
    }
  }
}
Le destinataire signe l'acceptation des contenants présents sur le BSFF
mutation SignBsff($id: ID!, $input: BsffSignatureInput!) {
  signBsff(id: $id, input: $input) {
    id
    status
    packagings {
      id
    }
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "type": "ACCEPTATION",
    "author": "Jean Dupont"
  }
}
Les informations sur l'opération effectuée (D13) sur le contenant sont complétées
mutation UpdateBsffPackaging($id: ID!, $input: UpdateBsffPackagingInput!) {
  updateBsffPackaging(id: $id, input: $input) {
    id
    acceptation {
      date
    }
    operation {
      date
    }
  }
}
{
  "id": "ID_PACKAGING_1",
  "input": {
    "operation": {
      "date": "2022-11-05",
      "code": "D13",
      "description": "Regroupement",
      "nextDestination": {
        "plannedOperationCode": "R2",
        "cap": "CAP 2",
        "company": {
          "siret": "SIRET_TRAITEUR",
          "name": "Traiteur & Co",
          "address": "1 avenue des roses 67100 Strasbourg",
          "contact": "Thomas Largeron",
          "phone": "03 00 00 00 00",
          "mail": "thomas.largeron@traiteur.fr"
        }
      }
    }
  }
}
Le destinataire signe l'opération des contenants présents sur le BSFF
mutation SignBsff($id: ID!, $input: BsffSignatureInput!) {
  signBsff(id: $id, input: $input) {
    id
    status
    packagings {
      id
    }
  }
}
{
  "id": "ID_BSFF",
  "input": {
    "type": "OPERATION",
    "author": "Jean Opération"
  }
}