Proposed approach, end-to-end workflows, and an honest phased cost & timeline — in response to your Data Integration Scope of Work (v1).
You don't need "an automation." You need your accounting operating model rebuilt.
Data should flow from every property system into Sage Intacct automatically — validated, reconciled, and controlled — with Hansji owning the platform and Analytix's scope reduced. Our sequence follows your own principle:
Reports downloaded by hand, re-keyed and reformatted, accounts mapped manually, reconciliation lived in spreadsheets, failed imports fixed by hand.
flowchart LR
subgraph SRC["Property systems (vary by hotel)"]
PMS["PMS
Maestro / Fossi"]
POS["POS
Silverware / Upserve / Gilbarco"]
PAY["Payments
Paymentech / Fullsteam / Stripe / Tock ..."]
PR["Payroll
Paycom / 7Shifts"]
AP["AP / Expense
Ottimate / Expensify"]
end
SRC -->|"download reports
manually"| M1["Analytix + GMs
re-key & reformat"]
M1 -->|"hand-map accounts
& dimensions"| M2["Manual spreadsheets
(CC batches, temp labor, waste)"]
M2 -->|"manual import"| SI["Sage Intacct"]
M2 -.->|"failed imports
re-processed by hand"| M1
SI --> PROB{"Consequences"}
PROB --> P1["Error risk &
weak audit trail"]
PROB --> P2["Slow month-end close"]
PROB --> P3["No management visibility"]
PROB --> P4["Leaders doing clerical recon,
not running hotels"]
classDef bad fill:#fde2e2,stroke:#c0392b,color:#7b241c;
class PROB,P1,P2,P3,P4 bad;
Five controlled data states. No black box; Hansji holds all admin and credentials.
flowchart TD
subgraph SOURCES["Source systems (per property)"]
S1["PMS"]:::src
S2["POS / Fuel"]:::src
S3["Payment processors"]:::src
S4["Payroll / Time"]:::src
S5["AP / Bank feed (BofA Cash Pro)"]:::src
end
SOURCES -->|"API / SFTP / scheduled report
(confirmed per system)"| RAW["1 · RAW LANDING
immutable, as-received"]:::stage
RAW --> VAL["2 · VALIDATED & STANDARDISED
control totals · dedupe · business-date"]:::stage
VAL --> ACCT["3 · ACCOUNTING-READY
mapped · balanced · approved journals"]:::stage
ACCT -->|"controlled, idempotent load"| SI["Sage Intacct
(system of record)"]:::sor
VAL --> RPT["4 · REPORTING-READY
dimensional · KPI-conformed"]:::stage
RPT --> DASH["Role-based dashboards
Rooms / F&B / Payroll / Controls"]:::out
RAW -.-> EXC["5 · EXCEPTION & AUDIT
every posting traceable to source"]:::exc
VAL -.-> EXC
ACCT -.-> EXC
EXC --> ALERT["Rule-based alerts
→ owner + resolution tracking"]:::out
DASH --> AI["AI layer (last)
explains variance · summarises exceptions
never posts without approval"]:::ai
classDef src fill:#e8f1fb,stroke:#2c5f9e,color:#1b3a5c;
classDef stage fill:#eef7ee,stroke:#2e7d32,color:#1b4d1e;
classDef sor fill:#fff4e0,stroke:#e08e0b,color:#7a4d06;
classDef out fill:#f0ecfb,stroke:#6a4bbc,color:#3a2870;
classDef exc fill:#fde2e2,stroke:#c0392b,color:#7b241c;
classDef ai fill:#e6f7f6,stroke:#12897f,color:#0a4b46;
sequenceDiagram
autonumber
participant PMS as PMS (night audit)
participant POS as POS / Fuel
participant PROC as Payment processors
participant PIPE as Hansji data pipeline
participant SI as Sage Intacct
participant MGR as Property / Corporate mgr
PMS->>PIPE: Daily revenue, tenders, ledger movements (after night-audit signal)
POS->>PIPE: Sales, comps, voids, tenders (flag PMS-settled vs POS-settled)
PROC->>PIPE: Settlement batches, fees, refunds, chargebacks
PIPE->>PIPE: Validate control totals · tag business date · dedupe · map accounts/dimensions
alt Totals tie & journal balances
PIPE->>SI: Post balanced journal (idempotent, full audit trail)
PIPE->>MGR: Dashboard updated (freshness + recon status = tied out)
else Mismatch / missing feed / unbalanced
PIPE->>MGR: Exception alert (what · variance · likely reason · owner · action)
Note over PIPE,SI: Nothing posts until resolved — no black-box adjustments
end
Trace every payment: PMS/POS → processor → bank → Sage Intacct. Retire the GM spreadsheets.
flowchart LR
A["Payments in PMS & POS
(by hotel business date)"]:::a
B["Processor settlement batches
(gross − fees − refunds − chargebacks)"]:::b
C["Bank deposits
(BofA Cash Pro feed)"]:::c
D["CC clearing balance
in Sage Intacct"]:::d
A --> ENGINE{{"Reconciliation engine
rule-based matching"}}
B --> ENGINE
C --> ENGINE
D --> ENGINE
ENGINE -->|matched| OK["Auto-cleared
(evidence retained)"]:::ok
ENGINE -->|"timing diff"| TIMING["Open clearing item
(visible, aged — not written off)"]:::warn
ENGINE -->|"unmatched / missing / duplicate"| EXC["Exception queue
category · owner · aging"]:::exc
TIMING --> REVIEW["Reviewer workflow
+ audit history"]:::rev
EXC --> REVIEW
classDef a fill:#e8f1fb,stroke:#2c5f9e;
classDef b fill:#f0ecfb,stroke:#6a4bbc;
classDef c fill:#eef7ee,stroke:#2e7d32;
classDef d fill:#fff4e0,stroke:#e08e0b;
classDef ok fill:#d7f0d7,stroke:#2e7d32,color:#1b4d1e;
classDef warn fill:#fff3cd,stroke:#b8860b,color:#6b5200;
classDef exc fill:#fde2e2,stroke:#c0392b,color:#7b241c;
classDef rev fill:#e6f7f6,stroke:#12897f;
Managers review exceptions, approve summaries, and get alerts only when action is required.
flowchart TD
START["Continuous checks on every feed & journal"] --> RULES{"Rule / threshold
breached?"}
RULES -->|No| CLEAR["Silent — no noise"]:::ok
RULES -->|Yes| GEN["Generate exception
type · variance · likely reason · data"]:::warn
GEN --> OWN["Assign owner + escalation path"]
OWN --> NOTIFY["Alert only the person who must act"]
NOTIFY --> TRACK["Track resolution + SLA"]
TRACK --> AUDIT["Audit history retained"]:::rev
GEN --> AIEXP["AI drafts plain-English explanation
e.g. 'HK overtime 18% over target because...'"]:::ai
classDef ok fill:#d7f0d7,stroke:#2e7d32;
classDef warn fill:#fff3cd,stroke:#b8860b;
classDef rev fill:#e6f7f6,stroke:#12897f;
classDef ai fill:#e6f7f6,stroke:#12897f,color:#0a4b46;
flowchart LR
T0["Inventory every task
Analytix does today
(volume · time · error rate)"]:::a --> T1{"Classify each task"}
T1 --> E["Eliminate
(via redesign)"]:::ok
T1 --> A["Automate
(pipeline)"]:::b
T1 --> H["Move in-house
(Hansji admins)"]:::c
T1 --> R["Retain w/ Analytix
(defined SLA + quality)"]:::warn
E --> SEQ["Sequenced cutover
parallel-run · no gap in postings"]:::rev
A --> SEQ
H --> SEQ
R --> SEQ
classDef a fill:#e8f1fb,stroke:#2c5f9e;
classDef b fill:#eef7ee,stroke:#2e7d32;
classDef c fill:#f0ecfb,stroke:#6a4bbc;
classDef warn fill:#fff3cd,stroke:#b8860b;
classDef ok fill:#d7f0d7,stroke:#2e7d32;
classDef rev fill:#e6f7f6,stroke:#12897f;
gantt
title Hansji — Phased Delivery (indicative; firms up after discovery)
dateFormat YYYY-MM-DD
axisFormat %b
section Phase 0 · Discovery & Design
Current-state discovery (Analytix + property + corporate) :d1, 2026-08-04, 4w
Future-state design + build-vs-buy + recon design :d2, after d1, 2w
KPI dictionary + alert matrix + architecture :d3, after d1, 2w
section Phase 1 · Pilot (1-2 properties)
Data integration (PMS/POS/payments/payroll to Intacct) :p1, after d2, 5w
Settlement + cash + bank reconciliation :p2, after d2, 5w
Dashboards + exception/alert engine :p3, after p1, 3w
Parallel run through 1 full month-end close :p4, after p3, 4w
section Phase 2 · Rollout
Onboarding playbook + remaining properties :r1, after p4, 8w
section Ongoing
Analytix transition + support + 3-yr roadmap :o1, after p4, 8w
Discovery & Design ~6 weeks · Pilot ~12–14 weeks (incl. one full parallel month-end) · Rollout per-property, batched · then support + transition.
Team: Senior Engineer / Technical Lead + Mid Engineer + Hospitality-Finance / BI Analyst, with solution-architect oversight. Priced fixed-fee per phase so Hansji controls spend and gates at each stage.
| Phase | What Hansji gets | Est. fee (USD) | Duration |
|---|---|---|---|
| Phase 0 Discovery & Design | Verified current-state maps, systems-by-property matrix, manual-work & time inventory, source→Intacct mapping, reconciliation design, KPI dictionary, alert matrix, build-vs-buy recommendations, architecture, pilot plan + budget | $14,000 – $18,000 | ~6 wks |
| Phase 1 Pilot (1–2 properties, end-to-end) | Live automated PMS/POS/payment/payroll feeds → Intacct; multi-way settlement + cash + bank reconciliation; financial-controls dashboard; rule-based alerts; parallel-run through one month-end close; acceptance criteria met | $40,000 – $60,000 | ~12–14 wks |
| Phase 2 Rollout (per property) | Onboard each remaining property using the repeatable playbook | $4,000 – $7,000 / property | batched |
| Ongoing Support & platform ops | Monitoring, exception SLAs, enhancements, Analytix-transition support, roadmap | $3,000 – $4,500 / month | retainer |