Αναφορά MCP / Χρεώσεις
Εργαλεία για χρεώσεις, αποδείξεις και τιμολόγια
Οκτώ εργαλεία για το καθολικό χρεώσεων και τα παραστατικά (αποδείξεις και τιμολόγια) που εκδίδονται από αυτό. Η ακύρωση είναι αντιστροφή που παραμένει στο καθολικό, όχι διαγραφή.
Πώς διαβάζεται
Κάθε εργαλείο παρακάτω παραθέτει τις παραμέτρους του ακριβώς όπως τις δηλώνει το σχήμα εισόδου: τον τύπο, αν είναι υποχρεωτική, τις επιτρεπτές τιμές όπου τις ορίζει το σχήμα, και τι σημαίνει η κάθε παράμετρος σύμφωνα με το σχήμα. Τίποτα από αυτά δεν γράφεται εδώ: ένα ποσό σε λεπτά, μια προεπιλογή που ισχύει αν παραλείψετε ένα πεδίο, ποια ενέργεια χρειάζεται ποιο id, όλα έρχονται από το ίδιο το εργαλείο.
Το practiceId δεν είναι ποτέ παράμετρος. Προέρχεται από το token σας, και οι διαδρομές εγγραφής το αφαιρούν αν το στείλει ο client.
Ένα εργαλείο που γράφει δείχνει ένα παράδειγμα για κάθε ενέργεια, γιατί αυτό που χρειάζεται μια ενέργεια δεν είναι ό,τι ορίζει υποχρεωτικό το σχήμα εισόδου: το σχήμα ζητά το action και τα υπόλοιπα τα αφήνει στην ενέργεια. Κάθε παράδειγμα είναι πλήρες αίτημα tools/call, και οι παράμετροί του ελέγχονται, όταν φτιάχνεται αυτή η σελίδα, με το ίδιο αντικείμενο που διαβάζει ο server. Τα σφάλματα επιστρέφονται μέσα σε απόκριση 200 με isError: δείτε την επισκόπηση MCP και τον πλήρη κατάλογο.
Χρεώσεις, αποδείξεις και τιμολόγια
Το καθολικό των χρεώσεων και τα παραστατικά (αποδείξεις και τιμολόγια) που εκδίδονται από αυτό.
get_outstanding_balances
Κάθε ασθενής που χρωστά στο ιατρείο, με την ημερομηνία της παλαιότερης ανεξόφλητης χρέωσης και πόσων ημερών είναι. Δώστε olderThanDays για να απαντήσετε «ποιοι χρωστούν πάνω από 30 ημέρες». Οι εισπράξεις πιστώνονται πρώτα στις παλαιότερες χρεώσεις, οπότε η ηλικία είναι το ποσό που πράγματι οφείλεται ακόμη.
Παράμετροι
| Εργαλείο | Τύπος | Υποχρεωτικό; | Τι σημαίνει |
|---|---|---|---|
| olderThanDays | integer | Προαιρετικό | Only patients whose oldest unpaid charge is MORE than this many days old — 30 means 31 and up, not 30 and up, which is what "older than 30 days" means to a practice. For "at least 30", pass 29. OMIT IT unless the caller named a number of days: there is no default age, and a filter nobody asked for hides the answer. |
Παράδειγμα κλήσης
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_outstanding_balances",
"arguments": {}
}
}Αποτέλεσμα
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": { "...": "the requested records" },
"content": [{ "type": "text", "text": "<the same JSON>" }]
}
}Σφάλματα
| Κωδικός | Κατάσταση | Πότε |
|---|---|---|
| validation_failed | 400 | Λείπει παράμετρος, έχει λάθος τύπο, ή είναι εκτός των επιτρεπτών τιμών. |
| plan_feature_required | 403 | Το πακέτο του ιατρείου δεν το περιλαμβάνει. Το MCP χρειάζεται Complete. |
list_billing_entries
Λίστα χρεώσεων για όλο το ιατρείο, προαιρετικά σε εύρος ημερομηνιών (ημέρες του ιατρείου, μαζί με την πρώτη και την τελευταία). Για έναν ασθενή, και για το τι οφείλει, χρησιμοποιήστε list_patient_billing_entries.
Παράμετροι
| Εργαλείο | Τύπος | Υποχρεωτικό; | Τι σημαίνει |
|---|---|---|---|
| from | string | Προαιρετικό | Only include records on or after this date. YYYY-MM-DD. Optional. |
| to | string | Προαιρετικό | Only include records on or before this date. YYYY-MM-DD. Optional. |
| includeVoided | boolean | Προαιρετικό | Also list voided (cancelled) rows, marked voided=true. Only for a question about what was voided: they count for nothing. The answer always says how many it left out (voidedCount). |
| limit | integer | Προαιρετικό | How many entries to return, the newest kept. The answer says when older ones were left out (truncated); totals always cover every entry matched. |
Παράδειγμα κλήσης
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_billing_entries",
"arguments": {}
}
}Αποτέλεσμα
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": { "...": "the requested records" },
"content": [{ "type": "text", "text": "<the same JSON>" }]
}
}Σφάλματα
| Κωδικός | Κατάσταση | Πότε |
|---|---|---|
| validation_failed | 400 | Λείπει παράμετρος, έχει λάθος τύπο, ή είναι εκτός των επιτρεπτών τιμών. |
| forbidden | 403 | Ο καλών δεν είναι ιδιοκτήτης του ιατρείου. |
| plan_feature_required | 403 | Το πακέτο του ιατρείου δεν το περιλαμβάνει. Το MCP χρειάζεται Complete. |
get_billing_entry
Ανάγνωση μιας χρέωσης με βάση το id.
Παράμετροι
| Εργαλείο | Τύπος | Υποχρεωτικό; | Τι σημαίνει |
|---|---|---|---|
| entryId | string | Υποχρεωτικό |
Παράδειγμα κλήσης
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_billing_entry",
"arguments": {
"entryId": "a6e5987e-a6e5-4c3a-9e21-7b84c5d10f33"
}
}
}Αποτέλεσμα
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": { "...": "the requested records" },
"content": [{ "type": "text", "text": "<the same JSON>" }]
}
}Σφάλματα
| Κωδικός | Κατάσταση | Πότε |
|---|---|---|
| validation_failed | 400 | Λείπει παράμετρος, έχει λάθος τύπο, ή είναι εκτός των επιτρεπτών τιμών. |
| not_found | 404 | Το id δεν υπάρχει στο ιατρείο σας. Ένα κακοσχηματισμένο id φαίνεται ίδιο. |
| plan_feature_required | 403 | Το πακέτο του ιατρείου δεν το περιλαμβάνει. Το MCP χρειάζεται Complete. |
get_invoice
Ανάγνωση εκδοθέντος παραστατικού (απόδειξης ή τιμολογίου) και των παγιωμένων γραμμών του. Για το προσχέδιο, get_patient_invoice_preview.
Παράμετροι
| Εργαλείο | Τύπος | Υποχρεωτικό; | Τι σημαίνει |
|---|---|---|---|
| invoiceId | string | Υποχρεωτικό |
Παράδειγμα κλήσης
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_invoice",
"arguments": {
"invoiceId": "504ef4ed-504e-4c3a-9e21-7b84c5d10f33"
}
}
}Αποτέλεσμα
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": { "...": "the requested records" },
"content": [{ "type": "text", "text": "<the same JSON>" }]
}
}Σφάλματα
| Κωδικός | Κατάσταση | Πότε |
|---|---|---|
| validation_failed | 400 | Λείπει παράμετρος, έχει λάθος τύπο, ή είναι εκτός των επιτρεπτών τιμών. |
| not_found | 404 | Το id δεν υπάρχει στο ιατρείο σας. Ένα κακοσχηματισμένο id φαίνεται ίδιο. |
| plan_feature_required | 403 | Το πακέτο του ιατρείου δεν το περιλαμβάνει. Το MCP χρειάζεται Complete. |
get_appointment_charge
Τι χρειάζεται για να χρεωθεί ένα ραντεβού: αν μπορεί να χρεωθεί, και η υπηρεσία του καταλόγου που του αντιστοιχεί, με το id και την τιμή της. Χρησιμοποιήστε το πριν χρεώσετε ραντεβού με write_billing_entry.
Παράμετροι
| Εργαλείο | Τύπος | Υποχρεωτικό; | Τι σημαίνει |
|---|---|---|---|
| appointmentId | string | Υποχρεωτικό |
Παράδειγμα κλήσης
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_appointment_charge",
"arguments": {
"appointmentId": "d4398f97-d439-4c3a-9e21-7b84c5d10f33"
}
}
}Αποτέλεσμα
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": { "...": "the requested records" },
"content": [{ "type": "text", "text": "<the same JSON>" }]
}
}Σφάλματα
| Κωδικός | Κατάσταση | Πότε |
|---|---|---|
| validation_failed | 400 | Λείπει παράμετρος, έχει λάθος τύπο, ή είναι εκτός των επιτρεπτών τιμών. |
| not_found | 404 | Το id δεν υπάρχει στο ιατρείο σας. Ένα κακοσχηματισμένο id φαίνεται ίδιο. |
| plan_feature_required | 403 | Το πακέτο του ιατρείου δεν το περιλαμβάνει. Το MCP χρειάζεται Complete. |
write_billing_entry
Δημιουργία, ενημέρωση ή ακύρωση χρέωσης. action=create απαιτεί patientId· update και void απαιτούν entryId. Η ακύρωση είναι αντιστροφή, όχι διαγραφή — η εγγραφή μένει στο καθολικό σημειωμένη ως άκυρη. Μια εγγραφή receipt καταγράφει είσπραξη και παίρνει αριθμό είσπραξης (HCRM-0001)· δεν είναι παραστατικό. Αποδείξεις και τιμολόγια εκδίδονται με write_invoice.
Παράμετροι
| Εργαλείο | Τύπος | Υποχρεωτικό; | Τι σημαίνει |
|---|---|---|---|
| action | string: create | update | void | Υποχρεωτικό | |
| entryId | string | Προαιρετικό | The entry to update or void. |
| patientId | string | Προαιρετικό | The patient the entry belongs to. Required for action=create. |
| type | string: charge | credit | receipt | Προαιρετικό | What the entry is. Required for action=create, and NOT changeable afterwards. charge = money owed by the patient; credit = a reduction of what they owe; receipt = money received from them. |
| amountMinor | integer | Προαιρετικό | The entry's value as a positive whole number. Required for action=create, except a charge with appointmentId, which takes the price of its service (the booking's, or the one named in serviceId). In MINOR currency units (cents): 4500 means 45.00, not 4500.00. |
| serviceId | string | Προαιρετικό | The catalog service this entry is for; the document line then prints the service's own name. A charge with appointmentId takes the booking's service by itself; otherwise use list_services. Link the service rather than writing its name into notes. Not changeable after creation. |
| appointmentId | string | Προαιρετικό | Optional appointment this charge or payment is for (type=charge or type=receipt; never a credit). A charge needs a confirmed appointment of the same patient; use list_appointments to find it and its serviceRef. An appointment can have one charge that is not voided: a second is refused with appointment_already_charged, and voiding the first frees it. A payment may name an appointment only after that appointment's charge is saved: before it, the payment is refused with appointment_not_charged. So for charge, payment and receipt, propose the charge alone first, and the payment only once the charge has been saved. Not changeable after creation. |
| serviceDate | string | Προαιρετικό | The date the work was done, YYYY-MM-DD — distinct from when the entry was keyed in, so revenue lands in the right period. Date only, no time. |
| notes | string | Προαιρετικό | Extra words for the document line, printed after the service's name. Leave it out unless the user gave such words; never repeat the service name here. |
| paymentMethod | string: cash | card | transfer | other | Προαιρετικό | How the money arrived, only on type=receipt (a payment): cash, card, transfer (a bank transfer) or other. A charge or a credit with one is refused. Optional: send it only when the caller said how they were paid; never guess it, and never ask for it before recording the money. action=update may correct it on a payment. |
| reason | string | Προαιρετικό | Why the entry is being voided. Only for action=void. |
Παράδειγμα κλήσης
action=create
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "write_billing_entry",
"arguments": {
"action": "create",
"patientId": "0f1c7a2e-5b6d-4c3a-9e21-7b84c5d10f33",
"type": "charge",
"amountMinor": 4500,
"serviceId": "5e6f7081-1c2d-4e9f-8a3b-4c5d6e7f8091",
"serviceDate": "2026-11-02"
}
}
}action=update
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "write_billing_entry",
"arguments": {
"action": "update",
"entryId": "3c4d5e6f-9a0b-4c7d-8e1f-2a3b4c5d6e7f",
"amountMinor": 5000
}
}
}action=void
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "write_billing_entry",
"arguments": {
"action": "void",
"entryId": "3c4d5e6f-9a0b-4c7d-8e1f-2a3b4c5d6e7f",
"reason": "entered_in_error"
}
}
}Αποτέλεσμα
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": { "...": "the written record" },
"content": [{ "type": "text", "text": "<the same JSON>" }]
}
}Σφάλματα
| Κωδικός | Κατάσταση | Πότε |
|---|---|---|
| validation_failed | 400 | Λείπει παράμετρος, έχει λάθος τύπο, ή είναι εκτός των επιτρεπτών τιμών. |
| not_found | 404 | Το id δεν υπάρχει στο ιατρείο σας. Ένα κακοσχηματισμένο id φαίνεται ίδιο. |
| appointment_already_charged | 409 | Το ραντεβού έχει ήδη χρέωση που δεν έχει ακυρωθεί. Ακυρώστε την πρώτα. |
| plan_feature_required | 403 | Το πακέτο του ιατρείου δεν το περιλαμβάνει. Το MCP χρειάζεται Complete. |
| subscription_read_only | 403 | Η συνδρομή έχει λήξει, οπότε το ιατρείο είναι μόνο για ανάγνωση και δεν γράφεται τίποτα. |
write_invoice
Έκδοση παραστατικού για τις μη χρεωμένες εγγραφές ασθενή (action=issue, απαιτεί patientId) ή ακύρωση εκδοθέντος (action=void, απαιτεί invoiceId). Εκδίδει απόδειξη, εκτός αν δοθεί kind=invoice, που απαιτεί ΑΦΜ στον φάκελο του ασθενή. Η έκδοση παγιώνει τις τρέχουσες γραμμές.
Παράμετροι
| Εργαλείο | Τύπος | Υποχρεωτικό; | Τι σημαίνει |
|---|---|---|---|
| action | string: issue | void | Υποχρεωτικό | |
| patientId | string | Προαιρετικό | The patient whose unbilled charges to bill. Required for action=issue. |
| kind | string: receipt | invoice | Προαιρετικό | What to issue. receipt (default) for a private patient; invoice for a customer with a tax id. Only for action=issue. |
| entryIds | array<string> | Προαιρετικό | Only bill these charges (ids from list_patient_billing_entries). Name them whenever the request was about a visit, a day or a period: omitting them bills EVERY unbilled charge the patient has, and a receipt for one day's visit came out at nearly five times the amount because a debt from weeks earlier was swept in with it. Omit them only when the caller genuinely means everything outstanding. Issuing a receipt for a payment just recorded means billing the CHARGE the payment settles, never the payment entry itself (type=receipt is a payment and can never go on a document). Only for action=issue. |
| invoiceId | string | Προαιρετικό | The document to void. Required for action=void. |
| reason | string | Προαιρετικό | Why the document is being voided. Only for action=void. |
Παράδειγμα κλήσης
action=issue
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "write_invoice",
"arguments": {
"action": "issue",
"patientId": "0f1c7a2e-5b6d-4c3a-9e21-7b84c5d10f33",
"kind": "receipt",
"entryIds": [
"3c4d5e6f-9a0b-4c7d-8e1f-2a3b4c5d6e7f"
]
}
}
}action=void
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "write_invoice",
"arguments": {
"action": "void",
"invoiceId": "4d5e6f70-0b1c-4d8e-9f2a-3b4c5d6e7f80",
"reason": "entered_in_error"
}
}
}Αποτέλεσμα
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": { "...": "the written record" },
"content": [{ "type": "text", "text": "<the same JSON>" }]
}
}Σφάλματα
| Κωδικός | Κατάσταση | Πότε |
|---|---|---|
| validation_failed | 400 | Λείπει παράμετρος, έχει λάθος τύπο, ή είναι εκτός των επιτρεπτών τιμών. |
| not_found | 404 | Το id δεν υπάρχει στο ιατρείο σας. Ένα κακοσχηματισμένο id φαίνεται ίδιο. |
| recipient_tax_id_required | 422 | kind=invoice για ασθενή χωρίς ΑΦΜ στον φάκελό του. Η απόδειξη δεν το χρειάζεται, το τιμολόγιο ναι. |
| receipt_not_paid | 409 | Η απόδειξη πιστοποιεί εισπραχθέντα, οπότε δεν εκδίδεται για ποσό μεγαλύτερο από αυτό που πλήρωσε ο ασθενής. |
| entries_not_billable | 409 | Ένα id στο entryIds δεν είναι χρέωση που τιμολογείται: έχει ακυρωθεί, είναι ήδη σε παραστατικό, ή δεν είναι χρέωση. |
| plan_feature_required | 403 | Το πακέτο του ιατρείου δεν το περιλαμβάνει. Το MCP χρειάζεται Complete. |
| subscription_read_only | 403 | Η συνδρομή έχει λήξει, οπότε το ιατρείο είναι μόνο για ανάγνωση και δεν γράφεται τίποτα. |
send_invoice
Στέλνει ΠΡΑΓΜΑΤΙΚΟ EMAIL: ένα εκδοθέν παραστατικό, συνημμένο ως PDF, στο email του ασθενή που υπάρχει στο αρχείο και πουθενά αλλού. Προαιρετικά locale en ή el. Απορρίπτεται για ακυρωμένο παραστατικό, για ασθενή χωρίς email, και μετά από 3 αποστολές του ίδιου παραστατικού μέσα σε μία ώρα.
Παράμετροι
| Εργαλείο | Τύπος | Υποχρεωτικό; | Τι σημαίνει |
|---|---|---|---|
| invoiceId | string | Υποχρεωτικό | The issued document to email (from list_patient_invoices or write_invoice). |
| locale | string: en | el | Προαιρετικό | The language of the email and the attached PDF: en or el. Leave it out to use the calling user's own language. |
Παράδειγμα κλήσης
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "send_invoice",
"arguments": {
"invoiceId": "4d5e6f70-0b1c-4d8e-9f2a-3b4c5d6e7f80",
"locale": "el"
}
}
}Αποτέλεσμα
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": { "...": "the written record" },
"content": [{ "type": "text", "text": "<the same JSON>" }]
}
}Σφάλματα
| Κωδικός | Κατάσταση | Πότε |
|---|---|---|
| validation_failed | 400 | Λείπει παράμετρος, έχει λάθος τύπο, ή είναι εκτός των επιτρεπτών τιμών. |
| not_found | 404 | Το id δεν υπάρχει στο ιατρείο σας. Ένα κακοσχηματισμένο id φαίνεται ίδιο. |
| invoice_voided | 409 | Το παραστατικό έχει ακυρωθεί. Ένα ακυρωμένο παραστατικό δεν αποστέλλεται. |
| patient_email_missing | 422 | Δεν υπάρχει διεύθυνση αποστολής: ο ασθενής δεν έχει email στον φάκελό του. |
| plan_feature_required | 403 | Το πακέτο του ιατρείου δεν το περιλαμβάνει. Το MCP χρειάζεται Complete. |
| subscription_read_only | 403 | Η συνδρομή έχει λήξει, οπότε το ιατρείο είναι μόνο για ανάγνωση και δεν γράφεται τίποτα. |
Συχνές ερωτήσεις
Οι καρτέλες ασθενών κρυπτογραφούνται, και εκεί που φυλάσσονται και καθώς έρχονται στην οθόνη σας. Τα αρχεία είναι ιδιωτικά, και ο σύνδεσμος προς ένα αρχείο σταματά να δουλεύει μετά από λίγο. Οι αλλαγές στις καρτέλες των ασθενών καταγράφονται, με το ποιος τις έκανε και πότε. Δεν υπάρχει κοινός κωδικός ιατρείου: ο καθένας έχει τον δικό του λογαριασμό. Στο πακέτο Complete, ο ιδιοκτήτης του ιατρείου μπορεί επίσης να απαιτεί σύνδεση σε δύο βήματα για όλη την ομάδα.
Ναι. Ο ιδιοκτήτης του ιατρείου μπορεί να εξάγει τον κατάλογο ασθενών, τις αναφορές και το ιστορικό ενεργειών σε αρχείο υπολογιστικού φύλλου (CSV) μέσα από την εφαρμογή, και οποιοσδήποτε στο ιατρείο μπορεί να κατεβάσει τα αρχεία του οποιαδήποτε στιγμή. Τα δεδομένα του ιατρείου σας ανήκουν σε εσάς, χωρίς χρέωση ή καθυστέρηση εξαγωγής. Αυτό ισχύει και στα δύο πακέτα, στη δοκιμή, αλλά και μετά την ακύρωση.
Το HyperCRM είναι λογισμικό επί πληρωμή. Κάθε ιατρείο ξεκινά με δωρεάν δοκιμή 30 ημερών στο πακέτο Complete, χωρίς κάρτα. Στη συνέχεια τα πακέτα ξεκινούν από 19 € και 34 € τον μήνα, με ΦΠΑ. Η τιμή εξαρτάται από το πόσους επαγγελματίες υγείας απασχολείτε. Κάθε τιμή βρίσκεται στη σελίδα τιμών, οπότε δεν χρειάζεται να μιλήσετε με πωλητή.