{"id":9517,"plugin_id":"plugin_asdk_app_69c018134d508191b3a46476b0440d51","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T22:55:06.525Z","digest":"2902e132c77ef86cfbf974c126016814c77b9b8ee39deba2a50cd8fcb824350c","against":null,"payload":{"description":"Build privacy-minimized Nowistay financial and operational reports across many properties. Use for CSV or spreadsheet exports, revenue and fee totals, OTA commissions, cleaning costs, team-member billing, workload reports, owner statements, and booking-to-mission reconciliation.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":480}],"name":"nowistay-portfolio-reporting","skill_md_contents":"---\nname: nowistay-portfolio-reporting\ndescription: Build privacy-minimized Nowistay financial and operational reports across many properties. Use for CSV or spreadsheet exports, revenue and fee totals, OTA commissions, cleaning costs, team-member billing, workload reports, owner statements, and booking-to-mission reconciliation.\n---\n\n# Nowistay Portfolio Reporting\n\nFavor complete table-shaped extraction over repeated detailed calls.\n\n## Collect data\n\n1. Confirm the requested date range, portfolio scope, grouping dimensions, and output format. Infer obvious values from the prompt instead of asking unnecessary questions.\n2. Resolve properties once with `list_properties`. Omit `property_ids` from later list calls when the user wants every eligible property.\n3. Call `list_bookings` with `response_format=table`, `include_details=false`, `limit=500`, and `offset=0`.\n4. Append each page's `rows` under the returned `columns`. Continue with `resultMetadata.nextOffset` while `resultMetadata.hasMore=true`.\n5. Call `list_missions` in the same table mode only when the report needs cleaning, operations, assignments, workload, or team-member data.\n6. Join booking and mission rows with `bookingId` when combining finances and operations. Use property IDs only as a secondary key.\n\nNever restart the extraction property by property unless the user explicitly requests separate queries or the server requires it. Never use `get_booking`, `get_mission`, or `include_details=true` for a bulk export.\n\n## Minimize personal data\n\n- Select and retain only the source columns needed for the requested report.\n- Exclude guest names, contact details, reservation references, message content, private notes, and mission descriptions from financial, owner, billing, and workload reports unless the user explicitly requests a specific field and it is necessary for that report.\n- Do not call tools with contact-detail or private-note include flags for aggregate reporting.\n- Team-member names may be included when the user requests assignment, workload, or billing by team member. Do not include their contact details.\n\n## Calculate and verify\n\n- Keep currencies separate. Never sum EUR and USD into one total.\n- Keep cancelled or unavailable bookings separate from active revenue unless the user defines another rule.\n- Preserve source columns in the detailed sheet and add calculated summary sheets or tables.\n- Support grouping by property, team member, mission type, booking channel, status, month, or currency.\n- Reconcile row counts against pagination metadata before reporting completion.\n- State filters, exclusions, currency handling, and any missing source values in the result.\n\n## Deliver\n\nFor a requested CSV or spreadsheet, create the file from the complete concatenated rows. Include a readable summary plus a privacy-minimized detail sheet containing only the columns needed to audit the totals. If the user only asks a question, return the totals directly without creating a file.\n\nDo not claim data is truncated when `hasMore=false` and all pages were collected. A shortened tool card is a display behavior, not evidence that the structured result is incomplete.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}