Abrechnungsvorgang stornieren
Abrechnungsvorgänge sind nicht veränderbar. Um die Daten eines Abrechnungsvorgangs zu ändern, muss dieser storniert und anschließend neu erzeugt werden.
Für ein korrektes Storno sind folgende Schritte erforderlich.
Den richtigen Abrechnungsvorgang ermitteln
Es ist möglich, dass im Laufe der Zeit pro Verordnung mehrere Abrechnungsvorgänge (Charge) entstehen, zum Beispiel für Nachforderungen, Korrekturabrechnungen, Teilabrechnungen, Schlussabrechnungen usw.. Deswegen müssen Sie ausgehend von der im PVS gespeicherten Verordnung zunächst den korrekten Abrechnungsvorang ermitteln.
Ermitteln Sie die id des Charge-Objektes, dass Sie stornieren möchten mit Hilfe der charges Query. Wenn auf diesem Weg mehrere Abrechnungsvorgänge ermittelt werden, lassen Sie den Anwender entscheiden, welcher Vorgang storniert werden soll.
Pseudo-Code:
const chargeFilterInput = {
prescriptionKey: "100/1548.example.com",
states: ["SUBMITTED"]
};
// this call returns a json graph containing all charges of the given prescriptionKey.
const charges = await graphql(`
query getCharges($input: ChargeFilterInput!) {
charges(input: $input) {
id
key
prescriptionKey
state
indexData {
supplement {
pocketKey
cardboxColor
cardboxColorCaption
}
},
}
}`,
{ input : chargeFilterInput }
);
// display elements in charges to the user to select the charge to cancel.
const chargeId = charges[i].id;
Übergeben Sie die selektierte Charge.id an die cancelCharge Mutation. Der Abrechnungsdienst storniert den angegebenen Abrechnungsvorgang und liefert das stornierte Charge-Objekt zurück.
Pseudo-Code:
// cancel the selected charge:
// this call may throw exceptions for different error cases
const charge = await graphql(`
mutation cancelCharge($id: UUID!, $input: CancelChargeInput!) {
cancelCharge(id: $id, input: $input) {
id,
key,
state,
indexData {
supplement {
pocketKey,
cardboxColor,
cardboxColorCaption
}
}
}
}`,
{
id : chargeId,
input: {
remark: null
}
}
);
// tell the user about the cancellation result and advise to invalidate the barcode.
console.log(`Bitte entfernen Sie die Verordnung mit der Belegnummer ${charge.key} aus
dem Fach ${charge.indexData.supplement.poketKey} und machen Sie den Barcode ungültig.`);
Taxat wird ungültig
Das vom Anwender bereits aufgedruckte Taxat, inklusive des QR-Codes wird durch die Stornierung ungültig. Bitte informieren den Anwender entsprechend über die UI.
Besonderheiten
Abrechnungsvorgänge mit charge.state === CANCELLED wurden bereits storniert und können nicht ein zweites Mal storniert werden. Entsprechende Versuche beantwortet der Abrechnungsdienst mit einer Fehlermeldung.
Abrechnungsvorgänge mit charge.state === SUSPENDED wurden vom Abrechnungsdienst für künftige Verarbeitung zurückgestellt und können nicht storniert werden. Entsprechende Versuche beantwortet der Abrechnungsdienst mit einer Fehlermeldung.
Siehe auch ChargeState.
Anwendern könnte es schwer fallen, aus der Liste der zu einer Verordnung gehörenden Abrechnungsvorgängen den richtigen für ein Storno auszuwählen. In der Regel wünscht der Anwender die Stornierung des letzten Abrechnungsvorgangs. Das PVS sollte daher eine Rückfrage stellen, wenn der Anwender versucht, einen anderen als den Abrechnungsvorgang mit der höchsten Belegnummer (charge.key) zu stornieren.
Abrechnungsvorgänge, die bereits an den Abrechnungsdienst eingesendet sind, können nur noch bis zum auf die Einsendung folgenden Tag 10.00 Uhr storniert werden. Versuche jenseits dieser Zeitschranke beantwortet der Abrechnungsdienst mit einer Fehlermeldung. Beim Storno bereits eingesendeter Abrechnungsvorgänge ist ein erläuternder Kommentar erforderlich.
Pseudo-Code:
// select the charge to cancel.
const i = ...;
// cancel the selected charge:
// this call may throw exceptions for different error cases
const charge = await graphql(`
mutation cancelCharge($id: UUID!, $input: CancelChargeInput!) {
cancelCharge(id: $id, input: $input) {
id,
key,
state,
indexData {
supplement {
pocketKey,
cardboxColor,
cardboxColorCaption
}
}
}
}`,
{
id : charges[i].id,
input: {
// fill in remark, when neccessary
remark: charges[i].job.state !== null ? "Hier Begründung angeben." : null
} }
);