Welcome. This page is a practical, task‑oriented guide to running your hotel on Aries PMS. It maps directly to this application’s modules and screens: Reservations, Guests, Rooms, Housekeeping, Billing, Reports, Admin, Front Desk operations, Key Cards, and Messaging.
Tip: You must be assigned to a hotel to access most features. If you see limited data, ask an admin to assign a hotel to your user.
Technical: Authentication uses signed JWT stored in an httpOnly cookie named access_token.
Back‑end: pms_reservations.py creates records; room availability computed via pms_rooms.search_rooms_with_availability.
Due check‑outs and currently checked‑in guests are available via pms_front_desk helpers and surfaces on the dashboard.
Select a guest when creating a reservation or search and attach afterwards. Guest data auto‑fills contact info for confirmations and billing.
Technical: points and status updates are handled server‑side; manual database edits are not required.
Back‑end: pms_rooms.py for inventory and availability queries.
Back‑end: pms_housekeeping.py. A test utility exists at tools/test_hk_sync.py.
UI: billing.html and billing_print.html. Back‑end: pms_billing.py; routes in src/routes/billing_routes.py.
Stored per hotel in hotels.vat_config. The summary groups charges by mapped VAT rate and displays normalized percentages.
Payments are stored in the payments table with method and timestamp; folio status flips to PAID once total ≤ sum of payments.
GET /api/reports?report_type=MEAL_PLANS&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
GET /api/reports/export?report_type=MEAL_PLANS&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
Implemented in src/routes/rms_routes.py using pms_rms_integration.get_combined_report; hotel selection via get_all_hotels(). Aliases accepted for meal plans: MEALS, MEAL, MEAL_PLAN, MEALPLANS.
Shows per-day counts of guests on Breakfast or Half-board and configured per-person amounts/currency for each date. CSV columns: date, breakfast_count, breakfast_amount, breakfast_currency, half_board_count, half_board_amount, half_board_currency.
Meals Checklist: A printable list for the restaurant at /meals-list with hotel and date filters. Also accessible from the Meal Plans report via the “Meals Checklist” button.
Template: admin.html; Back‑end: pms_hotels.py for hotel and categories.
Aries PMS includes a privacy‑first, one‑click Guest Online Check‑In flow. Guests receive a secure, one‑time link and can confirm their check‑in before arrival. Links are valid until the end of the arrival day and become unusable after completion. Tokens are stored as bcrypt hashes in the database.
.env:
SMTP_SERVER, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD, SMTP_USE_TLS, SMTP_FROM, SMTP_FROM_NAME.From the Admin UI:
From the CLI (automation/cron):
python tools/send_online_checkin_emails.py \
--days-before 2 \
--hotel-id YOUR_HOTEL_ID \
--base-url https://pms.your-domain.com [--limit 100] [--dry-run]
Script applies the same eligibility rules as the Admin action.
CONFIRMEDONLINE_CHECKIN entitlement/online-checkin?token=....pms_reservations.create_or_refresh_online_checkin_token() stores a token id, a bcrypt hash of the secret, and an expires_at set to end of arrival day.pms_reservations.validate_online_checkin_token() checks status, completion flag, expiry, and verifies the hash.pms_reservations.mark_online_checkin_completed() sets online_checkin_completed_at = NOW() and clears token fields.get_hotel_smtp_settings) with global .env fallback.PUBLIC_BASE_URL (or APP_BASE_URL/PMS_BASE_URL) when present; otherwise request base URL.reservations.online_checkin_email_sent_at and reservations.online_checkin_completed_at.Note: Housekeeping report restriction is enforced in the UI (dropdown shows only Meal Plans) and in the API (/api/reports, /api/reports/export return 403 for other types).
Email is the login username. Passwords are stored securely (hashed). Consider using strong passphrases.
MANAGER and STAFF are mapped to FRONT_DESK..env SMTP variables are set.CONFIRMED for the selected arrival date.--dry-run to see candidates.PUBLIC_BASE_URL in .env for production behind proxies).reservations.online_checkin_completed_at (database field).For deeper technical details, see docs/pms_documentation.md included in this project.
Configure a connection to rms.aries-software.net to pull Final Rates into PMS. Rates are stored in
category_daily_rates and mapped to your hotel's Standard room category
(we pick the first category whose name starts with "Standard"; otherwise the first category).
https://rms.aries-software.net),
RMS Hotel ID, and API Key (header X-API-Key)./api/v1/hotels/{rms_hotel_id}/final-rates?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD.POST /api/rms/final-rates/import with the selected room_category_id, which proxies to RMS
/api/v1/hotels/{rms_hotel_id}/room-categories/final-rates?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD&room_category_id=ID.category_daily_rates for the selected category. The table updates after import.curl -sS -D - \
-H "X-API-Key: YOUR_RMS_API_KEY" \
"https://rms.aries-software.net/api/v1/hotels/YOUR_RMS_HOTEL_ID/final-rates?start_date=2025-09-21&end_date=2025-09-30" | head -n 20
See also: docs/troubleshooting_rms.md for connectivity tips.
Aries PMS now exposes a Channel Manager API for connected partners to read availability and rates, and to create reservations. Access is gated: only hotels that purchased the CM_API module can use it, and API calls must include a valid API key with required scopes.
Authorization: Bearer <key_id>:<secret>cm:inventory:read – GET availabilitycm:rates:read – GET ratescm:reservations:write – POST reservationsGET /api/cm/v1/hotels/{hotel_id}/availability?start=YYYY-MM-DD&end=YYYY-MM-DD&mode=count|grid
curl -s \
-H "Authorization: Bearer <key_id>:<secret>" \
"http://localhost:8000/api/cm/v1/hotels/1/availability?start=2025-10-01&end=2025-10-03&mode=count"
GET /api/cm/v1/hotels/{hotel_id}/rates?start=YYYY-MM-DD&end=YYYY-MM-DD
curl -s \
-H "Authorization: Bearer <key_id>:<secret>" \
"http://localhost:8000/api/cm/v1/hotels/1/rates?start=2025-10-01&end=2025-10-03"
This endpoint fetches Final Rates from the remote RMS for the given date range, upserts them into PMS under the hotel's Standard room category, and returns the stored rates. If the remote call fails, it returns HTTP 502.
POST /api/cm/v1/hotels/{hotel_id}/reservations
curl -s -X POST \
-H "Authorization: Bearer <key_id>:<secret>" \
-H "Content-Type: application/json" \
-d '{
"guest": {"first_name": "API", "last_name": "Tester", "email": null, "phone": null},
"stay": {"check_in_date": "2025-10-01", "check_out_date": "2025-10-03", "adults": 2, "children": 0},
"special_requests": "Quiet room",
"preferred_room_id": null,
"client_reference": "ext-12345"
}' \
"http://localhost:8000/api/cm/v1/hotels/1/reservations"
Idempotency (best-effort): posting the same guest + dates again may return the existing reservation.
Authorization example directly in your API client.ARIES_SKIP_DB_INIT=1 python tools/test_cm_api_readonly.pyARIES_SKIP_DB_INIT=1 python tools/test_cm_api_write.pypython tools/seed_cm_api_key.py --hotel-id <ID>CM_API) for the property. Keys are hotel-bound and rate-limited.
Last updated: 2025-09-21 20:57
If you have other problems or questions, create a support ticket here.