1.0.0
Status: in development.
Al-Mohaseb 1.0.0 rebuilds the AL-Mohaseb Windows application as Orchard Core modules, on .NET 10, Orchard Core 4.0 and CrestApps Orchard Core 3.0. These notes grow with every feature that lands.
Platform
- The
CrestApps.Almohaseb.Webhost, with the CrestApps tenant hierarchy guards installed in every tenant. - Setup recipes for a convenience-store business, a service business and the platform tenant. See Setup recipes.
Foundation
- Business profile under Settings > Business profile, with validation, phone and ZIP normalisation, and the EIN protected at rest and masked. See Foundation.
- The business calendar: business dates in the tenant's time zone with a configurable start of the business day.
- Document numbering services, and primitives such as
Money,FiscalCalendarandEmployerIdentificationNumber. - Every Al-Mohaseb content type and part has a technical name starting with
Almohaseb(AlmohasebVendor,AlmohasebVendorPart), so none can collide with CrestApps Commerce, Marketplace or another module on the same site; screens show the same names as before. A site set up earlier is renamed in place, with its content items and role permissions. See Content type and part names.
Admin UI
- One search and filter pattern shared by every admin list, with date, amount, status and sort terms. See Admin UI.
Jobs
- Durable background jobs that run in paced, checkpointed batches, survive restarts, and are listed under Tools > Jobs. See Jobs.
Contacts
- Customers & vendors: Contacts > Customers, Vendors and Vendor categories as Orchard Core content types with CrestApps address and phone fields; unique names; vendor categories with the entry screens they are listed on; a vendor always has a category (the Windows app crashed on a vendor without one); payment terms, a default account, and a protected 1099 tax ID shown only with its last four digits. See Customers and Contacts.
Business data is not hardcoded
- Sales tax exemption reasons are a content type (Books > Sales tax exemptions) instead of a fixed list; the business recipes seed the Michigan 5080 lines. Only the Sales Tax category is created for every business; the business recipes seed starter sales and vendor categories (with Deposit and Bottle Refund for c-stores) that each business changes to its own.
Bank feeds
- Banking > Bank feeds connects your banks through Plaid: sign in to the bank in Plaid's window, choose the bank account each of its accounts feeds and the date to bring in from. Transactions come into review once each, categorized by your bank rules, when the bank has new ones, once a day and on Sync now; balances show with each account. Sign in again when the bank asks, and Disconnect removes the connection at Plaid too. Changes and removals at the bank are made in review, or flagged on a transaction already transferred. See Bank feeds. The Windows app's Plaid link read the access token from a browser response through outside sites; the feed now runs on the server with each business's access token protected.
Sales
- Sales > Daily sales: one row per sales category in the entry-screen order, subtracted categories made negative, revenue share with the rest posted to the new Amounts Collected for Others system account, the entered sales tax winning over the rates (the POS-tax override), and posting, re-posting and clearing through the posting engine. Zero rows are never saved. See Daily sales and Sales.
- The Admin UI editable grid has a fixed-rows mode (no row template).
- Sales > Credit sales and payments and Customer balances: house-account sales (part of the day's sales or on their own), payments that cannot exceed what is owed, statements with the running balance, and a balance that replaces the legacy stored procedure. See Credit sales and payments.
- Sales > Other income posted to the chosen income account, with the month it belongs to. See Other income.
- Books > Payment methods: the business's own list (Cash, Check, Credit card, On account to start), each with a role and an optional account, replacing the configured cheque and credit ids. See Payment methods.
Purchases
- Purchases > Bills: one bill with any mix of purchase-category and expense lines (replacing the three tables grouped by ParentId, whose other lines were saved with errors ignored), paid now or on account, with the duplicate warning and the vendor's usual payment method. See Bills.
- Vendor balances and vendor payments that cannot exceed what is owed, and 1099 totals per year (cash and checks, not cards; $600 through 2025, $2,000 from 2026). See Vendor payments and 1099 totals and Purchases.
Accounting firm
- Accounting firm: the firm's clients are the tenant hierarchy's Clients, each with its own site; the firm adds the services it gives each client, its assigned staff, its groups and private notes (Firm details), shown on the client's row; Open a client's books without signing in again, and add a client from the convenience store or service business setup. Firm > Preparers (PTIN, ERO, practitioner PIN), Client groups and Services are content types the firm extends; Settings > Firm has the EFIN and the services of a new client. See Clients of the firm.
Reports in one place
- Every report is under Reports, grouped by category: the mileage report, the trial balance and the 1099 totals joined the statements, the operational and the store reports there, and the other menus no longer link to reports. Reports use the export of the Reports area. Purchases > 1099 boxes keeps the yearly boxes and their verification.
Imports
- Tools > Import files: import journal entries and opening balances from a CSV file. Columns are guessed from their names and the mapping can be saved; every row is checked before anything is imported; the rows that cannot be imported download as CSV with what is wrong, to correct and import again. Other features add what they import. See Import files.
Payroll
- Payroll > Pay runs: W-2 employees (Social Security number protected) with their W-4 and MI-W4; pay runs worked out from gross to net with federal income tax by the Pub 15-T percentage method, Social Security up to its wage base, Medicare and Additional Medicare, FUTA, Michigan and city income tax (resident or where the employee works) and state unemployment; pay stubs with the year to date; posting of the wages, the employer's taxes, the liability and the net pay. The yearly tables are tax content loaded as data and verified before use. The Windows app reversed the W-4 other income and deductions, had no Social Security wage base, ignored extra withholding, taxed no nonresident working in a city, dropped every tax of an unsupported state and booked no employer taxes (PAY-02 to PAY-16). See Employees and pay runs.
- Payroll > Tax payments and Payroll > Payroll filings: EFTPS deposits and other payroll tax payments posted out of the payroll liability; the figures of Form 941 (with the fractions of cents and the monthly liability), Form 940 (each employee's FUTA base), the W-2s and W-3 and the Michigan withholding by quarter, with the deposit due dates of the monthly or semiweekly schedule. The Windows app had no payroll returns. See Payroll filings and tax payments.
- 1099 boxes: each 1099 vendor chooses the box its payments go in (1099-NEC box 1, 1099-MISC rents, royalties, other income, medical, attorney proceeds), and the 1099 totals show the form and box with the year's threshold of that box. The boxes and thresholds of each year are tax content, verified by a person ($600 through 2025, $2,000 from 2026, royalties $10). See Vendor payments and 1099 totals.
- State withholding as data: Massachusetts (with paid family and medical leave) and Virginia join Michigan, each a record of state tax content (deductions, exemptions, brackets and contributions) that a provider loads for a new year or another state. An employee in a state without content is not paid with its taxes silently dropped, as the Windows app did (PAY-03, PAY-10, PAY-11, PAY-13).
Sales tax returns
- Taxes > Sales tax returns: each period's Michigan sales, use and withholding return (5080) worked out from the daily sales, service tickets and fuel deliveries, with its worksheet: deductions by exemption line, tax included in prices, prepaid tax, the discount (by the 20th, by the 12th, minimum $6/$18/$72), use tax, withholding and prior payments. Late returns lose the discount and owe the penalty by month (the Windows app charged 5% a day after 60 days) and interest; annual returns are due February 28 (not December 31). The annual return (5081) reconciles the year with what the filed returns paid (or is an annual filer's only return), with its overpayment credited forward or refunded. Amended returns (5092, 5082) are new versions worked out from the books that count what was already paid and keep the discount earned on time (the Windows app saved the 5092 over the 5080 and crashed on the 5082). Mark a return filed and record its payment, which posts to the books. See Sales tax returns.
Dashboard
- The first page is now a dashboard: profit this year and this month, category margins and, in a store, the last week's daily closes. Each widget's period can be changed, and widgets can be added, moved and resized. The Windows app's panels computed their own figures; these read the same books as the reports (RPT-23 to RPT-26). See The dashboard.
Operational reports
- Sales report by category and day or month (daily sales and service tickets together), Purchase report by date and vendor with each category's share, Operating expenses and Other income from the books so they match the profit and loss, and Performance (margin by category), each compared with the previous period or the same dates last year and exported to CSV or Excel; Customer activity (what each customer owed, bought, paid and owes); and the store reports Cards and EBT, Check deposits, Lottery summary and Fuel. The Windows app's comparisons used the wrong dates for service sales, the purchase report failed when purchases netted to zero, and the expense reports left out payroll (RPT-04 to RPT-14). See Operational reports.
Fuel
- Store > Fuel sales, Fuel deliveries and Fuel summary: gallons and sales of each grade from the pumps, tank readings, supplier deliveries with the prepaid sales tax per gallon (the last rate suggested, the same invoice refused twice), the tank variance from one reading to the next, and the prepaid tax paid by product for the sales tax return. Grades are your own list, each linked to the register category it is compared with. The Windows app had only the prepaid tax schedules of the sales tax return. See Fuel.
Lottery
- Store > Lottery books, Lottery count and Lottery terminal: receive books by barcode (a short or unknown scan is refused instead of failing), activate them into one box each, count them at the close with each book opening where it closed and sold-out books leaving the count, and enter the terminal's draw figures; both are compared with the lottery sales and payouts rung on the register. Games and boxes are your own lists (BOOK-39 to BOOK-43). See Lottery.
Check cashing
- Store > Checks cashed and Check deposits: checks the store cashes with their fee, number and maker; the cash paid from the register counts in the daily close; deposits with a printable slip; returned checks. Fees post to the income account you choose. A check loaded twice is refused (BOOK-33, CONN-08). See Check cashing.
Daily close
- Store > Daily close: enter the card and EBT totals of your own tenders, see the cash reconciliation (sales, credit sales, tenders, cash sales, what the drawer should hold, closing count) and the over or short, and post them: tenders move out of Undeposited Funds into their accounts and the over or short to its account. The Windows app recorded the card totals without posting anything, had a fixed set of fields, and a wizard without completion; the close has a checklist of the day's entries (CARD-01, CARD-02, RPT-15). See Daily close.
Cash drawer
- Store > Cash drawer: opening and closing counts by denomination, cash put in and taken out, and the cash the day took in; the closing count carries to the next day. Reasons and denominations are your own lists. "Once a day" now looks at the day itself, and carrying over checks the next day properly (BOOK-28, BOOK-29). See Cash drawer and Retail.
Banking
- Banking: bank and card accounts (a content type), CSV statement import with column guessing and a preview, where overlapping statements and re-imports add nothing (BANK-08). Bank rules with an explicit priority and whole-word, case-insensitive matching replace the legacy engine that let the alphabetically last title win (BANK-05); rules never override a person's choice, and use-once rules turn themselves off. Review transactions categorizes, excludes and transfers them to the books as journal entries against the bank's ledger account, in one unit of work and with undo (BANK-09, BANK-11). Money spent that matches a bill or vendor payment within 14 days is held as a possible duplicate until kept (BANK-10). See Bank accounts and statements and Banking.
Attachments
- Attach scanned invoices, receipt photos and other PDFs or images to bills, service tickets, other income and fixed assets, in a private per-business store. Files are recognized by their content (a renamed web page is refused), up to 10 MB and 20 per entry, and opened only by people who can see the entry. PDFs are accepted, unlike the Windows app's images-only blobs copied onto every bill row (BOOK-44). See Attachments and Documents.
Service tickets and invoices
- Sales > Service tickets and Sales > Invoices (service businesses): one ticket with its lines replaces the legacy grouped rows, so editing a ticket no longer orphans or duplicates its invoice (BOOK-02, BOOK-03). Paid tickets get receipt numbers, tickets on account invoice numbers; the due date follows the customer's payment terms; tax comes from the category unless entered. Invoices count in customer balances and statements. The receipt or invoice prints from the browser and is e-mailed through the site's e-mail settings, with no key in the code (BOOK-04). Lowering or deleting an invoice that is already paid is refused. See Service tickets and invoices and Sales.
Financial statements
- Reports > Profit and loss and Reports > Balance sheet: one statement engine over the ledger for the summary, the account detail and the comparison (previous period, previous year, each month), replacing three legacy reports with different totals (RPT-01 to RPT-03). Account trees roll subaccounts into their parents; the gross, operating and net profit always show, even at zero. The balance sheet shows the retained earnings of prior fiscal years and the net income of the current one without a year-end close, and says whether it balances. CSV and Excel export. See Financial statements and Ledger.
- New permission View the profit and loss and the balance sheet, implied by viewing journal entries.
Trip log
- Mileage: trips, vehicles and the IRS standard mileage rates as content types, with the rates seeded as data by date (2026 changes on July 1). The Mileage report gives total and business miles, the business-use percentage and the standard mileage deduction, by vehicle, with a CSV download; the Windows app had no rate, deduction or report (BOOK-37). A start odometer reading of 0 is accepted, and trips no longer copy the business's EIN and address. See Trip log and Mileage.
- The admin menus of Contacts, Sales, Purchases and Mileage have icons.
Fixed assets
- Books > Fixed assets: the asset register as a content type, the legacy straight-line depreciation posted month by month by a daily job, and sales with their gain or loss. A save posts only what changed and keeps the sale, fixing the legacy save that rewrote every asset's schedule (BOOK-25). See Fixed assets and Assets.
- Lists that read amounts no longer fail on SQLite when a column holds both whole and fractional amounts.
Items
- Books > Sales categories (the Windows app's departments): retail, service and purchase categories with revenue share, taxable rate as a percentage, exemption reasons for the sales tax return, the always-subtracted rule, the legacy entry-screen order, merging into a parent for reports, and the protected Sales Tax, Deposit and Bottle Refund system categories, found by key so they can be renamed. See Sales categories and Items.
Ledger
- The Accounting feature and Books > Chart of accounts. See Ledger.
- Books > Journal entries: manual journal entries with drafts, posting with gap-free
JE-numbers, immutable posted entries and reversals, and search terms for date, amount, account, status, kind and source. See Journal entries. - Reports > Trial balance on any date, from SQL aggregates over the posted journal lines. See Trial balance.
- The posting engine: modules post their documents through
IPostingRule<TSource>, idempotently by source and revision, with automatic reversal and re-posting. See Posting engine. - Books > Periods: close the books month by month (closing a period closes every open period before it), reopen the latest closed period with a reason, and a history of who closed and reopened each period. Closed periods refuse postings, and balances start from stored snapshots of the closed periods. See Periods.
- Books > Opening balances: the balances the books start with, posted as one entry with the difference to Opening Balance Equity, and re-posted when they change. See Opening balances.
- Journal entries posted from a document can no longer be reversed by hand; they follow their document.
- Books > Recurring entries: journal entries that repeat weekly, monthly, quarterly or yearly, saved as drafts or posted, created by a background job that catches up on missed dates and never creates a date twice; an entry that cannot be posted is saved as a draft with the reason. See Recurring entries.
- Enabling or disabling a feature no longer fails with "The CancellationTokenSource has been disposed" when the tenant restarts its background jobs.
- Tools > Jobs shows "n items" instead of "n of items" for a finished job with no known total.
- The Admin UI editable grid for line editors. See Editable grid.