iachat/app/javascript/dashboard/i18n/locale/en/captain.json
Rodribm10 28e880d7b6 feat(captain/hermes-builder): aba Verificação com 22+ checks + reparo automático
UI nova dentro do Construtor (Hermes) — TabBar com Chat e Verificação.
Verificação roda HermesBuilder::Validator (DB+runtime) e exibe resultado
agrupado por categoria, com botão Refazer inline em FAIL/WARN reparáveis.

Backend (porta dos checks DB do CLI bin/hermes-validate):
- HermesBuilder::Validator com 22+ checks: engine, profile, port,
  secret, parent, unit, Brand, CaptainInbox sync (o bug que travou
  Juliana), pricing dry-run, Inter creds, typing/response_delay,
  registry MCP completo.
- HermesBuilder::Repairer com 4 handlers automáticos: set_engine_hermes,
  sync_captain_inbox_unit, set_default_typing_delay,
  set_default_response_delay.
- Endpoints novos: GET assistants, GET validate?slug=, POST repair.

Frontend:
- builder/Index.vue: wrapper com TabBar.
- builder/BuilderChat.vue: extraído do Index original.
- builder/BuilderVerification.vue: dropdown + Conferir agora + lista
  agrupada por categoria com badges + botão Refazer inline.

i18n: keys em pt_BR e en sob CAPTAIN_HERMES_BUILDER.VERIFY.*.

Filesystem/systemd checks ficam pro CLI hermes-validate (Rails container
não enxerga /root/.hermes/profiles do host).

Validado HTTP: GET /validate?slug=juliana_qnn1 → 28 PASS / 0 FAIL / 1 WARN.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 15:27:40 -03:00

939 lines
34 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"CAPTAIN_RESERVATIONS": {
"HEADER": "Reservations",
"EMPTY": "No reservations found.",
"CREATE_SUCCESS": "Reservation successfully created.",
"CREATE_ERROR": "Failed to create reservation.",
"NEW_RESERVATION_MODAL": {
"TITLE": "New Reservation",
"CONFIRM": "Create Reservation",
"CANCEL": "Cancel",
"FIELDS": {
"CONTACT_ID": "Contact ID",
"CONTACT_ID_PLACEHOLDER": "Enter the contact ID",
"INBOX": "Inbox",
"INBOX_PLACEHOLDER": "Select an inbox",
"STATUS": "Reservation Status",
"STATUS_PLACEHOLDER": "Select status",
"SUITE_IDENTIFIER": "Suite Identifier (Ex: 101, Master Suite)",
"CHECK_IN": "Check-in",
"CHECK_OUT": "Check-out",
"TOTAL_AMOUNT": "Total Amount"
}
},
"VIEW": {
"LIST": "List",
"KANBAN": "Kanban",
"REVENUE": "Revenue"
},
"FILTERS": {
"SEARCH": "Search by name, CPF, or phone",
"STATUS": "Status",
"STATUS_ALL": "All statuses",
"UNIT": "Unit",
"UNIT_ALL": "All units",
"SUITE": "Suite",
"DATE_FROM": "From",
"DATE_TO": "To",
"SORT": "Sort",
"SORT_DEFAULT": "Operational priority",
"SORT_CHECK_IN": "Check-in date",
"SORT_UPDATED": "Last update",
"SORT_CREATED": "Created at",
"APPLY": "Apply filters",
"CLEAR": "Clear filters",
"HIDE": "Hide filters"
},
"KPI": {
"TOTAL": "Total on page",
"PENDING_PIX": "Awaiting PIX",
"CHECKIN_TODAY": "Check-in today",
"REVENUE_TODAY": "Revenue today"
},
"PILLS": {
"ALL": "All",
"DRAFT": "Draft",
"PENDING_PAYMENT": "Awaiting PIX",
"CONFIRMED": "Confirmed",
"CANCELLED": "Cancelled"
},
"QUICK_DATE": {
"TODAY": "Today",
"TOMORROW": "Tomorrow",
"WEEK": "7 days",
"ALL": "All"
},
"CARD": {
"CHECK_IN": "Check-in",
"AMOUNT": "Amount",
"TODAY": "Today",
"TOMORROW": "Tomorrow",
"YESTERDAY": "Yesterday",
"PIX_EXPIRED": "Expired",
"PIX_EXPIRES_IN_MIN": "Expires in {minutes}min",
"PIX_EXPIRES_IN_HR": "Expires in {hours}h"
},
"TABLE": {
"CUSTOMER": "Customer",
"UNIT": "Unit",
"SUITE": "Suite",
"CHECK_IN": "Check-in",
"AMOUNT": "Amount",
"STATUS": "Status",
"UPDATED_AT": "Updated",
"ACTIONS": "Actions"
},
"STATUS": {
"SCHEDULED": "Scheduled",
"PENDING_PAYMENT": "Awaiting payment",
"ACTIVE": "Active",
"CONFIRMED": "Confirmed",
"COMPLETED": "Completed",
"CANCELLED": "Cancelled",
"DRAFT": "Draft"
},
"ACTIONS": {
"OPEN_CONVERSATION": "Open conversation",
"COPY_PIX": "Copy Pix",
"MORE": "More",
"REGENERATE_PIX": "Resend PIX",
"MARK_AS_PAID": "Mark as paid",
"MARK_AS_PAID_CONFIRM": "Mark this reservation as manually paid?",
"MARKED_AS_PAID": "Reservation marked as paid.",
"MARK_AS_PAID_FAILED": "Failed to mark as paid.",
"CANCEL": "Cancel reservation",
"CANCEL_REASON_PROMPT": "Cancellation reason (optional):",
"CANCELLED": "Reservation cancelled.",
"CANCEL_FAILED": "Failed to cancel.",
"PIX_REGENERATED": "New PIX generated and sent.",
"PIX_REGENERATE_FAILED": "Failed to resend PIX."
},
"KANBAN": {
"EMPTY_COLUMN": "No reservations in this status."
},
"REVENUE": {
"ONLY_CONFIRMED": "Revenue includes only reservations with confirmed status.",
"SUMMARY": {
"TOTAL_REVENUE": "Total revenue",
"CONFIRMED_COUNT": "Confirmed reservations",
"AVERAGE_TICKET": "Average ticket"
},
"CHARTS": {
"BY_UNIT": "Revenue by unit",
"BY_SUITE": "Revenue by suite"
},
"API": {
"ERROR": "Unable to load revenue."
}
},
"SIDEBAR": {
"NO_RESERVATION": "No reservation linked to this conversation.",
"LOADING": "Loading reservation details...",
"STATUS": "Status",
"SUITE": "Suite",
"CHECK_IN": "Check-in",
"CHECK_OUT": "Check-out",
"AMOUNT": "Amount",
"UPDATED_AT": "Updated at"
},
"API": {
"PIX_EXPIRED": "Pix for this reservation is expired.",
"PIX_NOT_GENERATED": "Pix has not been generated yet.",
"PIX_COPIED": "Pix copied successfully.",
"PIX_COPY_FAILED": "Unable to copy Pix."
}
},
"CAPTAIN_ORCHESTRATOR_EDITOR": {
"MISSING_DELIMITER_PREFIX": "This prompt was saved before the sections split. All content appears in the \"System Base Prompt\" field. Click",
"MISSING_DELIMITER_BUTTON": "Restore Default",
"MISSING_DELIMITER_SUFFIX": "to get automatic splitting, or manually move assistant content to the correct field."
},
"CAPTAIN_ROLETA": {
"HEADER": "Roulette — Redeem",
"TAB_REDEEM": "Redeem",
"TAB_REPORT": "Report",
"REDEEM": {
"TITLE": "Deliver prize to guest",
"DESC": "Type the code the guest showed on WhatsApp and confirm the redemption. Jasmine automatically sends a confirmation to the guest.",
"CODE_LABEL": "Coupon code",
"CODE_PLACEHOLDER": "Ex: ABC123",
"NOTES_LABEL": "Note (optional)",
"NOTES_PLACEHOLDER": "Any detail about the redemption",
"SUBMIT": "Confirm redemption",
"SUBMITTING": "Registering...",
"SUCCESS_PREFIX": "{prize} delivered to ",
"SUCCESS_FULL": "✅ {prize} delivered to {name}.",
"ERROR_FULL": "⚠️ {message}",
"FALLBACK_CLIENT": "guest",
"ERROR_EMPTY_CODE": "Type the code printed on the guest's coupon.",
"ERROR_NOT_FOUND": "Code not found. Check the spelling.",
"ERROR_ALREADY_REDEEMED": "This coupon has already been redeemed.",
"ERROR_NO_PRIZE": "This coupon landed on \"No luck\" — nothing to deliver.",
"ERROR_NO_RECEPTIONIST": "Log in again and try once more.",
"ERROR_RPC_FAILED": "Error calling the reservations server.",
"ERROR_EXCEPTION": "Something broke. Tell the tech team.",
"ERROR_DEFAULT": "Not registered."
},
"HISTORY": {
"TITLE": "Active coupons (last 7 days)",
"LOADING": "Loading...",
"EMPTY": "No active coupons in recent days.",
"LOAD_ERROR": "Error loading pending coupons",
"COL_CODE": "Code",
"COL_PRIZE": "Prize",
"COL_CLIENT": "Guest",
"COL_GENERATED": "Generated",
"COL_STATUS": "Redemption",
"STATUS_REDEEMED_PREFIX": "✅ ",
"STATUS_PENDING": "⏳ Pending"
},
"REPORT": {
"TITLE": "Redemptions by receptionist",
"DESC": "Anti-fraud: flags those redeeming well above team average.",
"PERIOD_7": "Last 7 days",
"PERIOD_14": "Last 14 days",
"PERIOD_30": "Last 30 days",
"LOADING": "Loading report...",
"EMPTY": "No redemptions in this period.",
"LOAD_ERROR": "Error loading report",
"KPI_TOTAL": "Total redemptions",
"KPI_AVG": "Average per person",
"KPI_COUNT": "Active receptionists",
"KPI_THRESHOLD": "Alert threshold",
"KPI_THRESHOLD_PREFIX": "≥ ",
"COL_RECEPTIONIST": "Receptionist",
"COL_TOTAL": "Total",
"COL_BRINDES": "Gifts",
"COL_DESCONTOS": "Discounts",
"COL_SUM_DISCOUNT": "Σ % discount",
"COL_STATUS": "Status",
"STATUS_ANOMALY": "⚠️ Above average",
"STATUS_NORMAL": "Normal",
"FOOTER_HINT": "Alert triggers when a receptionist has ≥ {threshold} redemptions (minimum 5, or 2.5× team average). Verify guest conversations on WhatsApp to confirm."
}
},
"CAPTAIN_FUNNEL": {
"HEADER": "Conversion Funnel",
"DESC": "Track the customer journey from price inquiry to paid Pix. Identifies where customers drop off.",
"PERIOD_7": "7 days",
"PERIOD_30": "30 days",
"PERIOD_60": "60 days",
"PERIOD_90": "90 days",
"LOADING": "Loading funnel...",
"EMPTY": "No Captain conversations in this period. Try a different range.",
"LOAD_ERROR": "Error loading funnel",
"INSIGHT_LABEL": "Biggest drop-off point",
"INSIGHT_FULL": "{lost} customers dropped between \"{from}\" and \"{to}\" — that's {pct} of those who reached the previous stage.",
"FUNNEL_TITLE": "Overall funnel ({count} conversations analyzed)",
"BY_SUITE_TITLE": "By suite category",
"BY_SUITE_HEADER": "Suite",
"BY_SUITE_FOOTER": "Category detected by mention in conversation content. Conversations without specific mention are not shown in this breakdown.",
"STAGES": {
"price_inquiry": "Asked price",
"price_answered": "Received quote",
"reservation_drafted": "Reservation started",
"pix_generated": "Pix generated",
"pix_paid": "Pix paid"
}
},
"CAPTAIN_SETTINGS": {
"TITLE": "Captain Settings",
"UNITS": {
"TITLE": "Pix Units",
"DESC": "Manage the settings of different Pix units integrated with Banco Inter.",
"ADD_UNIT": "Add Unit",
"EDIT_UNIT": "Edit Unit",
"DELETE_UNIT": "Delete Unit",
"LIST": {
"TABLE_HEADER": [
"Pix Key",
"Account",
"Certificates",
"Monitoring",
"Actions"
],
"CERT": "Cert",
"KEY": "Key",
"PROACTIVE_ON": "Auto-check on",
"PROACTIVE_OFF": "Auto-check off",
"SEPARATOR": "|",
"ADD_NEW_UNIT": "Add a Pix Unit",
"NO_UNITS_MESSAGE": "There are no pix units entered yet. Create one now to start receiving by Banco Inter pix."
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"TITLE": "Delete Pix Unit",
"DESC": "Are you sure you want to delete this pix unit? This action cannot be undone.",
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure you want to delete the Unit?",
"YES": "Delete",
"NO": "Cancel"
},
"API": {
"SUCCESS_MESSAGE": "Unit deleted successfully.",
"ERROR_MESSAGE": "There was an error trying to delete the unit."
}
},
"ADD": {
"TITLE": "New Pix Unit",
"DESC": "Add your Banco Inter app credentials",
"CANCEL_BUTTON_TEXT": "Cancel",
"SUBMIT_BUTTON_TEXT": "Create unit",
"API": {
"SUCCESS_MESSAGE": "Unit created successfully!",
"ERROR_MESSAGE": "There was an error trying to create the unit."
}
},
"EDIT": {
"TITLE": "Edit Pix Unit",
"DESC": "Update Banco Inter credentials",
"CANCEL_BUTTON_TEXT": "Cancel",
"SUBMIT_BUTTON_TEXT": "Save unit",
"API": {
"SUCCESS_MESSAGE": "Unit updated successfully!",
"ERROR_MESSAGE": "There was an error trying to update."
}
},
"FORM": {
"NAME": {
"LABEL": "Unit Name",
"PLACEHOLDER": "Ex: Headquaters",
"ERROR": "Name is required"
},
"INTER_PIX_KEY": {
"LABEL": "Pix Key (from Inter app)",
"PLACEHOLDER": "Ex: 12.345.678/0001-90",
"ERROR": "Pix key is required",
"HELP_TEXT": "Your Pix key that will receive the charges"
},
"INTER_ACCOUNT_NUMBER": {
"LABEL": "Inter account number",
"PLACEHOLDER": "Ex: 1234567-8",
"ERROR": "Account number is required"
},
"INTER_CLIENT_ID": {
"LABEL": "Inter App Client ID",
"PLACEHOLDER": ""
},
"INTER_CLIENT_SECRET": {
"LABEL": "Inter App Client Secret",
"PLACEHOLDER": ""
},
"INTER_CERT_CONTENT": {
"LABEL": "Certificate Content (.crt)",
"PLACEHOLDER": "Paste the text contained in the .crt file here...",
"UPLOAD_BUTTON": "Import .crt file"
},
"INTER_KEY_CONTENT": {
"LABEL": "Key Content (.key)",
"PLACEHOLDER": "Paste the text contained in the .key file here...",
"UPLOAD_BUTTON": "Import .key file"
},
"PROACTIVE_PIX_POLLING": {
"LABEL": "Proactive payment confirmation (Banco Inter)",
"CHECKBOX_LABEL": "Check payment automatically every 10 minutes for up to 1 hour",
"HELP_TEXT": "When enabled, the system proactively queries Inter to confirm pending Pix payments.",
"DISABLED_HELP_TEXT": "Complete Banco Inter credentials (Client ID/Secret, account, Pix key, certificate and key) to enable."
},
"CERT_PRESENT_HELP": "Certificate already configured.",
"CANCEL": "Cancel",
"SAVE": "Save"
},
"INBOX": {
"LABEL": "Pix Unit",
"PLACEHOLDER": "Select a unit",
"NO_UNIT": "No unit linked",
"CONNECT_UNIT_LABEL": "Link Pix Unit",
"CONNECT_UNIT_PLACEHOLDER": "Choose the Inter unit for this inbox",
"CONNECT_UNIT_HELP": "Select which Pix Unit should be used by this inbox."
},
"TEST": {
"HEADER_TITLE": "Header validation",
"HEADER_DESCRIPTION": "Visual test to validate page rendering.",
"BODY_TEXT": "If this screen appears, the issue is likely in the table or Vuex, not in the base layout."
}
},
"GALLERY": {
"TITLE": "Gallery",
"DESC": "Manage suite photos that subagents can send to customers.",
"ADD_ITEM": "Add Photo",
"EDIT_ITEM": "Edit",
"DELETE_ITEM": "Delete",
"LIST": {
"TABLE_HEADER": [
"Image",
"Inbox and description",
"Category",
"Suite",
"Actions"
],
"ADD_NEW_ITEM": "Add gallery photos",
"NO_ITEMS_MESSAGE": "There are no photos available yet for automatic customer sending."
},
"DELETE": {
"CONFIRM": {
"TITLE": "Delete photo",
"MESSAGE": "Are you sure you want to delete this photo from the gallery?",
"YES": "Delete"
},
"API": {
"SUCCESS_MESSAGE": "Photo deleted successfully.",
"ERROR_MESSAGE": "Unable to delete the photo."
}
},
"ADD": {
"TITLE": "New gallery photo",
"DESC": "Upload a suite photo and metadata for agent search.",
"SUBMIT_BUTTON_TEXT": "Save photo",
"API": {
"SUCCESS_MESSAGE": "Photo created successfully!",
"ERROR_MESSAGE": "Unable to create the photo."
}
},
"EDIT": {
"TITLE": "Edit gallery photo",
"DESC": "Update gallery metadata and image.",
"SUBMIT_BUTTON_TEXT": "Save changes",
"API": {
"SUCCESS_MESSAGE": "Photo updated successfully!",
"ERROR_MESSAGE": "Unable to update the photo."
}
},
"FORM": {
"INBOX": {
"LABEL": "Inbox",
"GLOBAL_OPTION": "Global (all inboxes)",
"HELP": "Select which inbox can use these photos.",
"GLOBAL_HELP": "These photos can be used by agents in any inbox.",
"SPECIFIC_HELP": "These photos will be used only in inbox {inbox}."
},
"SUITE_CATEGORY": {
"LABEL": "Suite category",
"PLACEHOLDER": "Ex: Hydromassage",
"ERROR": "Suite category is required"
},
"SUITE_NUMBER": {
"LABEL": "Suite number/identifier",
"PLACEHOLDER": "Ex: 101",
"ERROR": "Suite identifier is required"
},
"DESCRIPTION": {
"LABEL": "Photo description",
"PLACEHOLDER": "Describe what appears in this photo",
"ERROR": "Description is required"
},
"IMAGE": {
"LABEL": "Image",
"HELP_TEXT": "Use clear photos. Recommended formats: PNG/JPG.",
"ERROR": "Image is required",
"PREVIEW_ALT": "Photo preview"
},
"ACTIVE": {
"LABEL": "Available for agent sending"
}
}
}
},
"CAPTAIN": {
"BANNER": {
"RESPONSES": "You have used more than 80% of your responses limit. To continue using Captain AI, please upgrade.",
"DOCUMENTS": "Documents limit reached. Please upgrade to continue using Captain AI."
},
"FORM": {
"CANCEL": "Cancel",
"CREATE": "Create",
"EDIT": "Update"
},
"RESPONSES": {
"HEADER": "FAQs",
"PENDING_FAQS": "Pending FAQs",
"ADD_NEW": "Create new FAQ",
"DOCUMENTABLE": {
"CONVERSATION": "Conversation #{id}"
},
"SELECTED": "{count} selected",
"SELECT_ALL": "Select all ({count})",
"UNSELECT_ALL": "Unselect all ({count})",
"SEARCH_PLACEHOLDER": "Search FAQs...",
"BULK_APPROVE_BUTTON": "Approve",
"BULK_DELETE_BUTTON": "Delete",
"BULK_APPROVE": {
"SUCCESS_MESSAGE": "FAQs approved successfully",
"ERROR_MESSAGE": "An error occurred while approving FAQs. Try again."
},
"BULK_DELETE": {
"TITLE": "Delete FAQs?",
"DESCRIPTION": "Are you sure you want to delete selected FAQs? This action cannot be undone.",
"CONFIRM": "Yes, delete all",
"SUCCESS_MESSAGE": "FAQs deleted successfully",
"ERROR_MESSAGE": "An error occurred while deleting FAQs, please try again."
},
"DELETE": {
"TITLE": "Are you sure you want to delete this FAQ?",
"DESCRIPTION": "",
"CONFIRM": "Yes, delete",
"SUCCESS_MESSAGE": "FAQ deleted successfully",
"ERROR_MESSAGE": "An error occurred while deleting FAQ, please try again."
}
}
},
"CAPTAIN_REPORTS": {
"TITLE": "AI Reports",
"DESC": "Weekly AI-generated insights based on each unit's conversations.",
"LOADING": "Loading reports...",
"ALL_UNITS": "All units",
"ALL_INBOXES": "All inboxes",
"UNITS_GROUP": "Pix Units",
"INBOXES_GROUP": "Inboxes",
"TABS": {
"DASHBOARD": "Dashboard",
"INSIGHTS": "AI Insights",
"OPERATIONAL": "Operational",
"EXECUTIVE": "Executive",
"LANDING_PAGES": "Landing Pages",
"RETENTION": "Retention"
},
"RETENTION": {
"PERIOD_LABEL": "Period",
"PERIOD_THIS_MONTH": "This month",
"PERIOD_LAST_30": "Last 30 days",
"PERIOD_LAST_90": "Last 90 days",
"PERIOD_CUSTOM": "Custom",
"APPLY": "Apply",
"NO_DATA": "No data.",
"KPI": {
"ACTIVE": "Active customers",
"ACTIVE_HINT": "last interaction within 30 days",
"RECURRING": "Recurring",
"RECURRING_HINT": "≥2 qualified interactions in 90 days",
"RETURN_30D": "30-day return rate",
"RETURN_30D_HINT": "returned to interact within 7 days",
"PIX_CONVERSION": "Pix conversion",
"PIX_CONVERSION_HINT": "{paid} paid out of {generated} generated"
},
"FLOW": {
"TITLE": "Period flow",
"NEW_IN_PERIOD": "new in period",
"RETURNED_IN_PERIOD": "returned in period",
"TOTAL_TOUCHES": "total interactions",
"BASE_STATUS": "Current base status",
"SLEEPING": "{count} sleeping",
"SLEEPING_HINT": "30-90d without contact",
"AT_RISK": "{count} at risk",
"AT_RISK_HINT": "90-180d without contact",
"CHURNED": "{count} inactive",
"CHURNED_HINT": "180d+ without contact"
},
"COHORT": {
"TITLE": "Cohort matrix",
"SUBTITLE": "% of each cohort's customers who returned to interact in M+N months.",
"EXPORT_CSV": "Export CSV",
"EMPTY": "No cohort data yet.",
"COL_COHORT": "Cohort",
"COL_SIZE": "Size",
"CELL_TITLE": "{count} active contacts ({rate}%)"
},
"BADGE": {
"STATUS_FIRST": "First contact",
"STATUS_INACTIVE": "Inactive",
"STATUS_AT_RISK": "At risk",
"STATUS_SLEEPING": "Sleeping",
"STATUS_RECURRING": "Recurring",
"STATUS_ACTIVE": "Active",
"LAST_INTERACTION": "last {days}",
"INTERACTIONS_LABEL": "interaction | interactions",
"INTERACTIONS_TITLE": "Qualified interactions (≥2+2 messages)",
"ONE_SHOT_LABEL": "one-shot",
"ONE_SHOT_TITLE": "One-shot consultations (≥1+1)",
"PIX_LABEL": "Pix paid",
"PIX_TITLE": "Pix generated / reservations paid",
"DAYS_TODAY": "today",
"DAYS_YESTERDAY": "yesterday",
"DAYS_RECENT": "{days} days ago",
"DAYS_ONE_MONTH": "about 1 month ago",
"DAYS_MONTHS": "{months} months ago",
"DAYS_YEARS": "{years} years ago"
},
"ERRORS": {
"SUMMARY": "Failed to load retention KPIs",
"COHORT": "Failed to load cohort"
}
},
"EXECUTIVE": {
"LOADING": "Loading executive digest...",
"NO_DATA": "No insights for the period. Run the weekly analysis to see data here.",
"TITLE": "Executive Digest",
"SUBTITLE": "Same report sent to Mattermost, with drill-down and filters.",
"DELIVER_BUTTON": "Send to Mattermost now",
"DELIVER_SUCCESS": "Digest queued. It will arrive in Mattermost shortly.",
"DELIVER_ERROR": "Failed to dispatch the digest. Check Rails log.",
"CONVERSATIONS": "Conversations",
"MESSAGES": "Messages",
"UNITS_ANALYZED": "Units analyzed",
"INSIGHTS_COUNT": "Insights generated",
"UNIT_TABLE": "Comparative by unit",
"COL_UNIT": "Unit",
"COL_CONVS": "Conversations",
"COL_DELTA": "vs previous week",
"COL_AI_RATE": "AI success rate",
"COL_FAILURES": "Failures",
"AI_FAILURES": "Where Angelina failed (click to see conversations)",
"OPPORTUNITIES": "Opportunities — what customers asked for",
"OPPORTUNITIES_HINT": "Click an opportunity to see real conversations where it was mentioned.",
"COMPLAINTS": "Recurring complaints",
"PRAISES": "Recurring praises",
"RECOMMENDATIONS": "AI Recommendations",
"DRILLDOWN_TITLE": "Related conversations",
"NO_CONVERSATIONS_FOUND": "No conversations found with those keywords in the period.",
"NO_CONVERSATIONS_HINT": "The insight description is an AI abstraction. If no keyword matches the literal conversation text, nothing is returned. Try clicking a more specific item.",
"SEARCH_TOKENS": "Keywords searched",
"OPEN_CONVERSATION": "Open in Chatwoot"
},
"LP": {
"LOADING": "Loading data...",
"NO_DATA": "No clicks recorded yet. Integrate the pixel on your landing page to see data here.",
"TOTAL_CLICKS": "Total Clicks",
"TOTAL_CONVERSIONS": "Conversions (WhatsApp)",
"CONVERSION_RATE": "Conversion Rate",
"TOTAL_DROPOFF": "Drop-off (No conversation)",
"DROPOFF_RATE": "Drop-off Rate",
"UNIQUE_CONTACTS": "Unique contacts converted",
"FUNNEL_TITLE": "Landing page funnel",
"DAILY_TREND": "Daily click vs conversion trend",
"BY_SOURCE": "Clicks by Source",
"BY_CAMPAIGN": "Clicks by Campaign",
"BY_HOSTNAME": "Clicks by Landing Page",
"CLICKS": "clicks",
"CONV": "conv",
"REFRESH": "Refresh",
"LEGEND_CLICKS": "Clicks",
"LEGEND_CONVERSIONS": "Conversions"
},
"FILTER_DATE": {
"LABEL": "Period:",
"START": "Start Date",
"END": "End Date",
"TODAY": "Today",
"YESTERDAY": "Yesterday",
"LAST_7_DAYS": "Last 7 days",
"LAST_30_DAYS": "Last 30 days",
"THIS_WEEK": "This week",
"LAST_WEEK": "Last Week",
"CURRENT_MONTH": "Current Month",
"LAST_MONTH": "Last Month",
"CUSTOM": "Custom",
"SEPARATOR": "-"
},
"INSIGHT": {
"CONVERSATIONS": "conversations",
"MESSAGES": "messages",
"TOP_TOPICS": "Top Topics",
"AI_FAILURES": "AI Failures",
"BULLET": "•",
"COUNT_PREFIX": "(",
"COUNT_SUFFIX": ")",
"TIMES": "x",
"SENTIMENT": "Sentiment",
"SENTIMENT_POSITIVE": "Positive",
"SENTIMENT_NEGATIVE": "Negative",
"SENTIMENT_NEUTRAL": "Neutral",
"PRAISES": "Customer Praises",
"COMPLAINTS": "Complaints",
"FAQ_GAPS": "FAQ Gaps",
"FAQ_GAPS_HINT": "Questions customers ask that the agent doesn't cover",
"MOST_REQUESTED_SUITES": "Most Requested Suites",
"PRICE_REACTIONS": "Price Reactions",
"PRICE_OBJECTIONS": "price objections",
"RECOMMENDATIONS": "Recommendations",
"SHOW_DETAILS": "View full analysis",
"HIDE_DETAILS": "Hide details"
},
"EMPTY": {
"TITLE": "No reports generated",
"MESSAGE": "Generate a new report to analyze support performance."
},
"GENERATE": {
"BUTTON": "Generate Analysis",
"SUCCESS": "Report requested successfully! It may take a few minutes.",
"ERROR": "Error requesting report generation.",
"DATE_REQUIRED": "Please select start and end dates."
},
"STATUS": {
"PENDING": "Pending",
"PROCESSING": "Processing",
"DONE": "Completed",
"FAILED": "Failed"
},
"OPERATIONAL": {
"LOADING": "Loading operational data...",
"NO_DATA": "No operational data for the selected period.",
"CONVERSATIONS_SECTION": "Conversations",
"RESERVATIONS_SECTION": "Reservations",
"TOTAL": "Total",
"RESOLVED": "Resolved",
"OPEN": "Open",
"AVG_RESOLUTION": "Avg resolution time",
"RES_TOTAL": "Total reservations",
"RES_PAID": "Paid",
"RES_EXPIRED": "Expired",
"RES_REVENUE": "Paid revenue",
"BY_INBOX": "Volume by inbox",
"RESOLUTION_RATE_TOOLTIP": "Resolution rate",
"DAILY_DIST": "Daily distribution",
"HOURLY_DIST": "Hourly distribution",
"PEAK": "Peak"
},
"DASHBOARD": {
"TOTAL_CONVERSATIONS": "Analyzed conversations",
"AVG_SENTIMENT": "Avg. positive sentiment",
"FAQ_GAPS_TOTAL": "FAQ gaps identified",
"WEEKS_ANALYZED": "weeks analyzed",
"NO_DATA": "Not enough data. Generate more AI reports to see the dashboard.",
"SENTIMENT_TREND": "Sentiment trend by week",
"FAILURES_RANKING": "Agent failure ranking",
"FAILURES_RANKING_HINT": "Most frequent situations where the AI couldn't respond well",
"FAQ_PRIORITY": "Priority FAQs to create",
"FAQ_PRIORITY_HINT": "Questions customers ask most that aren't in the FAQ yet",
"CUSTOMER_BEHAVIOR": "Customer behavior",
"TOP_TOPICS_TITLE": "Most discussed topics",
"SUITES_TITLE": "Most requested suites",
"COMPLAINTS_TREND": "Complaints volume by week",
"HANDOFFS_TITLE": "Estimated handoffs to human",
"HANDOFFS_HINT": "Based on AI failure frequency. Direct handoff tracking coming soon.",
"TREND_UP": "rising",
"TREND_DOWN": "falling",
"TREND_STABLE": "stable",
"WEEKS": "weeks"
},
"FAQ_QUICK_ADD": {
"BUTTON": "Create FAQ",
"TITLE": "Create FAQ from AI suggestion",
"QUESTION_LABEL": "Question (suggested by AI)",
"ANSWER_LABEL": "Answer",
"ANSWER_PLACEHOLDER": "Write the answer to this question...",
"ASSISTANT_LABEL": "AI Agent",
"ASSISTANT_PLACEHOLDER": "Select the agent",
"CANCEL": "Cancel",
"SAVE": "Save FAQ",
"SUCCESS": "FAQ created successfully!",
"ERROR": "Error creating FAQ. Please try again."
}
},
"CAPTAIN_LIFECYCLE": {
"HEADER": "Customer Journey",
"SUBTITLE": "Automated WhatsApp messages along the reservation lifecycle",
"TABS": {
"RULES": "Rules",
"SETTINGS": "Settings",
"HISTORY": "History"
},
"RULES": {
"EMPTY": "No rules configured yet.",
"CREATE": "New rule",
"TEMPLATES_TITLE": "Ready-made templates",
"COLUMNS": {
"NAME": "Name",
"EVENT": "Event",
"OFFSET": "Offset",
"FILTER": "Filter",
"STATUS": "Status",
"ACTIONS": "Actions"
},
"STATUS": {
"ENABLED": "Active",
"DISABLED": "Disabled"
},
"ACTIONS": {
"EDIT": "Edit",
"DUPLICATE": "Duplicate",
"TOGGLE": "Enable/Disable",
"DELETE": "Delete"
},
"DELETE_CONFIRM": "Are you sure you want to delete this rule?",
"TOAST": {
"CREATED": "Rule created successfully.",
"UPDATED": "Rule updated.",
"DELETED": "Rule deleted."
},
"WIZARD": {
"TITLE_CREATE": "New rule",
"TITLE_EDIT": "Edit rule",
"STEP_WHEN": "When?",
"STEP_WHO": "Who?",
"STEP_WHAT": "What?",
"STEP_REVIEW": "Review",
"NEXT": "Next",
"BACK": "Back",
"SAVE": "Save",
"CANCEL": "Cancel",
"OFFSET_UNIT_LABEL": "min",
"STEP_LABELS": {
"WHEN": "1. When?",
"WHO": "2. Who?",
"WHAT": "3. What?",
"REVIEW_TAB": "4. Review"
},
"REVIEW": {
"NAME": "Name:",
"EVENT": "Event:",
"OFFSET": "Offset (min):",
"UNITS": "Units:",
"MESSAGE": "Message:"
},
"FIELDS": {
"NAME": "Rule name",
"DESCRIPTION": "Description",
"EVENT": "Trigger event",
"OFFSET_VALUE": "Value",
"OFFSET_UNIT": "Unit",
"OFFSET_DIRECTION": "Direction",
"UNITS": "Units",
"CATEGORIAS": "Suite categories",
"PERMANENCIAS": "Stay types",
"MESSAGE_TYPE": "Message type",
"MESSAGE_BODY": "Message body",
"PRIORITY": "Priority",
"ENABLED": "Rule active"
},
"OFFSET_UNITS": {
"MINUTES": "Minutes",
"HOURS": "Hours",
"DAYS": "Days"
},
"OFFSET_DIRECTIONS": {
"BEFORE": "Before",
"AFTER": "After"
},
"EVENTS": {
"RESERVATION_CONFIRMED": "Reservation confirmed (Pix paid)",
"CHECKIN_SCHEDULED_AT": "Check-in time",
"CHECKOUT_SCHEDULED_AT": "Check-out time",
"RESERVATION_CANCELLED": "Reservation cancelled",
"RESERVATION_NO_SHOW": "No-show"
},
"MESSAGE_TYPES": {
"TEXT": "Plain text",
"BUTTONS": "Text with buttons",
"LIST": "List menu",
"URL_BUTTON": "Link button"
}
}
},
"SETTINGS": {
"GUARDS_TITLE": "Anti-spam guards",
"QUIET_HOURS_ENABLED": "Enable quiet hours",
"QUIET_HOURS_FROM": "From",
"QUIET_HOURS_TO": "To",
"MIN_INTERVAL": "Minimum interval between messages (min)",
"MIN_INTERVAL_HELP": "0 disables",
"PAUSE_ON_REPLY": "Pause if customer replied",
"PAUSE_ON_REPLY_WINDOW": "Window (min)",
"OPT_OUT_LABEL": "Opt-out label",
"MAX_PER_RESERVATION_INFO": "Maximum of 5 messages per reservation (not configurable)",
"CONCIERGE_TITLE": "Concierge (Sofia) per Unit",
"CONCIERGE_INBOX": "WhatsApp Inbox",
"CONCIERGE_PERSONA": "Persona name",
"CONCIERGE_KNOWLEDGE": "Knowledge base (markdown)",
"CONCIERGE_VARIABLES": "Unit variables",
"CONCIERGE_VARIABLE_KEY": "Key",
"CONCIERGE_VARIABLE_VALUE": "Value",
"CONCIERGE_ADD_VARIABLE": "Add variable",
"CONCIERGE_CONFIGURED": "Configured",
"CONCIERGE_NOT_CONFIGURED": "Not configured",
"SAVE": "Save changes",
"TOAST": {
"SAVED": "Settings saved.",
"CONCIERGE_SAVED": "Unit concierge updated."
}
},
"HISTORY": {
"EMPTY": "No deliveries recorded.",
"COLUMNS": {
"RULE": "Rule",
"CUSTOMER": "Customer",
"RESERVATION": "Reservation",
"STATUS": "Status",
"FIRE_AT": "Fired at",
"REASON": "Reason",
"ACTIONS": ""
},
"STATUS": {
"SCHEDULED": "Scheduled",
"SENT": "Sent",
"SKIPPED": "Skipped",
"FAILED": "Failed",
"CANCELLED": "Cancelled"
},
"FILTERS": {
"STATUS": "Status",
"RULE": "Rule",
"FROM": "From",
"TO": "To",
"ALL": "All"
},
"PREVIEW": "Preview",
"TOTAL": "total",
"PAGINATION": {
"PREV": "Prev",
"NEXT": "Next"
},
"MODAL": {
"TITLE": "Message preview",
"CLOSE": "Close",
"RULE": "Rule",
"STATUS": "Status",
"REASON": "Reason",
"ERROR": "Error",
"FIRE_AT": "Fire at",
"SENT_AT": "Sent at",
"RENDERED": "Rendered",
"RESERVATION_ID": "Reservation #"
}
}
},
"CAPTAIN_HERMES_BUILDER": {
"TITLE": "Agent Builder",
"DESCRIPTION": "Create new Hermes agents through a guided chat with the Builder.",
"HEADER_TITLE": "Agent Builder",
"HEADER_DESCRIPTION": "Chat with the Builder to create a new Hermes agent. It asks questions and saves the spec as JSON for review at the end.",
"RESET": "Clear conversation",
"RESET_CONFIRM": "Clear current conversation with the Builder?",
"EMPTY_STATE": "Ready to create a new Hermes agent? Click \"Start creation\" and the Builder will guide you.",
"PLACEHOLDER": "Type and press Enter to send (Shift+Enter for new line)",
"SEND": "Send",
"SESSION_LABEL": "Session:",
"SEND_FAILED": "Send failed: {message}",
"RESET_FAILED": "Failed to clear session.",
"START": "Start creation",
"TAB_CHAT": "Chat (Builder)",
"TAB_VERIFY": "Verification",
"VERIFY": {
"TITLE": "Agent verification",
"DESCRIPTION": "Runs health checks (database, routing, pricing, MCP) for a Hermes agent. For each failure with a Repair button, the UI attempts an automatic fix. Other failures need hermes-provision on the VPS.",
"NO_ASSISTANTS": "No Hermes agents registered",
"RUN": "Run check",
"RUNNING": "Checking...",
"REPAIR": "Repair",
"REPAIRING": "Repairing...",
"OK_LABEL": "OK",
"FAILS_LABEL": "failures",
"WARN_LABEL": "warnings",
"OF_TOTAL": "of {total} checks",
"VERDICT_PASS": "Ready to ship",
"VERDICT_FAIL": "Critical failures — fix first",
"EMPTY": "Select an agent and click Run check to start verification.",
"EMPTY_RESULTS": "No checks returned — agent removed?",
"REPAIR_FAILED": "Failed: {message}",
"REPAIR_OK": "Repaired: {message}",
"FETCH_FAILED": "Error loading assistants: {message}",
"VALIDATE_FAILED": "Validation failed: {message}",
"CATEGORY_DB": "Database",
"CATEGORY_PRICING": "Pricing",
"CATEGORY_ROUTING": "Captain → Hermes routing",
"CATEGORY_HUMANIZATION": "Humanization (typing/delay/gallery)",
"CATEGORY_MCP": "Registered MCP tools",
"CATEGORY_OTHER": "Other"
}
}
}