<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jett Fu</title>
    <description>The latest articles on DEV Community by Jett Fu (@jettfu).</description>
    <link>https://dev.to/jettfu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3850812%2Fd10e66de-00d6-49b3-9d83-bf456cf409b6.png</url>
      <title>DEV Community: Jett Fu</title>
      <link>https://dev.to/jettfu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jettfu"/>
    <language>en</language>
    <item>
      <title>HMRC and US LLCs: The Opaque Entity Tax Trap for UK Founders</title>
      <dc:creator>Jett Fu</dc:creator>
      <pubDate>Sat, 04 Apr 2026 04:47:31 +0000</pubDate>
      <link>https://dev.to/jettfu/hmrc-and-us-llcs-the-opaque-entity-tax-trap-for-uk-founders-4iib</link>
      <guid>https://dev.to/jettfu/hmrc-and-us-llcs-the-opaque-entity-tax-trap-for-uk-founders-4iib</guid>
      <description>&lt;p&gt;For years, UK residents who formed US single-member LLCs operated under a reasonable assumption: because the IRS treats a single-member LLC as a "disregarded entity," the income passes through to the individual. HMRC would see it the same way. The founder would report LLC income on their UK Self Assessment as personal income, and the US-UK Double Taxation Convention would handle any overlap.&lt;/p&gt;

&lt;p&gt;That assumption broke in April 2025.&lt;/p&gt;

&lt;p&gt;HMRC now classifies US LLCs as "opaque" entities -- treated as if they were corporations, not pass-through vehicles. This creates a structural mismatch: the IRS sees the LLC as invisible (income taxed on the individual's return), while HMRC sees it as a separate taxable entity (a foreign company). The US-UK Double Taxation Convention's relief mechanisms were not designed for this asymmetry. A UK resident operating a US LLC may face a scenario where neither country's tax credit provisions fully eliminate the double taxation.&lt;/p&gt;

&lt;p&gt;The change did not happen overnight. HMRC signaled its position through updated guidance in the International Manual (INTM) and a series of technical interpretations starting in 2023. But the practical implications -- how to report, what credits are available, what alternatives exist -- have left UK founders with US LLCs in a documentation gap that most online LLC formation guides have not caught up with.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does "Opaque" Mean in HMRC's Framework?
&lt;/h2&gt;

&lt;p&gt;HMRC classifies foreign entities using its own criteria, independent of how the entity's home jurisdiction classifies it. The relevant guidance is in &lt;a href="https://www.gov.uk/hmrc-internal-manuals/international-manual/intm180000" rel="noopener noreferrer"&gt;HMRC's International Manual at INTM180000&lt;/a&gt; onward.&lt;/p&gt;

&lt;p&gt;HMRC applies a functional test: does the entity have a legal personality separate from its members? Can it hold property in its own name? Do its members have limited liability? Is the entity's existence independent of its members?&lt;/p&gt;

&lt;p&gt;A US LLC answers "yes" to all of these. Under the laws of every US state, an LLC is a legal entity separate from its members. It holds property in its own name. Its members have limited liability. It continues to exist independent of any individual member.&lt;/p&gt;

&lt;p&gt;HMRC's conclusion: a US LLC is a "body corporate" -- a term that, for UK tax purposes, means the entity is treated as a company. Not a partnership. Not a transparent entity. A company.&lt;/p&gt;

&lt;h3&gt;
  
  
  How This Differs from the IRS View
&lt;/h3&gt;

&lt;p&gt;The IRS has a different mechanism. Under &lt;a href="https://www.ecfr.gov/current/title-26/chapter-I/subchapter-A/part-301/subpart-ECFRc89e8e7d5bb49b3/section-301.7701-3" rel="noopener noreferrer"&gt;Treasury Regulation Section 301.7701-3&lt;/a&gt;, a single-member LLC is a "disregarded entity" by default -- meaning the IRS treats it as if it does not exist for federal income tax purposes. The member reports all income on their personal return.&lt;/p&gt;

&lt;p&gt;HMRC has no equivalent check-the-box system. It does not adopt the IRS classification. It applies its own legal analysis based on the characteristics of the entity under the law of the jurisdiction where it was formed.&lt;/p&gt;

&lt;p&gt;The result: the same entity is transparent for US purposes and opaque for UK purposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Classification Mismatch Problem
&lt;/h2&gt;

&lt;p&gt;This is where the structural risk emerges. The mismatch is not merely academic. It affects which treaty articles apply, how income is characterized, and whether double tax relief is available.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Income Flows Under Each View
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;US perspective:&lt;/strong&gt; The LLC earns $100,000 in revenue. The IRS does not see this as corporate income. The income "passes through" to the individual member, who reports it on their personal US tax return (Form 1040-NR for a non-resident alien). If the founder is a UK resident with no US-source income and no US permanent establishment, the US may impose zero federal income tax on this income.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UK perspective:&lt;/strong&gt; HMRC sees the same $100,000 as income earned by a foreign company (the LLC). The UK-resident member did not earn income -- the company did. The member's taxable event, in HMRC's view, occurs when the LLC distributes profits to them. The distribution is then treated as dividend income from a foreign company.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where the Treaty Breaks Down
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://www.gov.uk/government/publications/usa-tax-treaties" rel="noopener noreferrer"&gt;US-UK Double Taxation Convention&lt;/a&gt; is designed to prevent the same income from being taxed twice. Article 24 (Elimination of Double Taxation) provides mechanisms -- primarily tax credits -- to offset tax paid in one country against tax owed in the other.&lt;/p&gt;

&lt;p&gt;But the credit mechanism depends on both countries agreeing on what is being taxed and who is being taxed.&lt;/p&gt;

&lt;p&gt;Under the US view, the individual earned the income. Under the UK view, the company earned the income. These are different taxpayers and different income characterizations. Article 24 provides credit for tax paid by the same person on the same income. When the US taxes the individual and the UK taxes distributions from a company, the treaty's matching mechanism does not align cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Scenario: UK SaaS Founder with a Wyoming LLC
&lt;/h2&gt;

&lt;p&gt;Take a UK-resident founder who operates a SaaS business through a Wyoming single-member LLC. The LLC has $120,000 in annual revenue, $40,000 in expenses, and $80,000 in net profit. The founder pays themselves the full $80,000 as a distribution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Under the IRS
&lt;/h3&gt;

&lt;p&gt;The LLC is disregarded. The IRS attributes the $80,000 in net profit to the individual. If the founder is a non-resident alien and the income is not "effectively connected" with a US trade or business, the US imposes no federal income tax on this income.&lt;/p&gt;

&lt;p&gt;The founder still files &lt;a href="https://www.globalsolo.global/blog/what-happens-if-you-miss-form-5472-non-resident-llc" rel="noopener noreferrer"&gt;Form 5472&lt;/a&gt; with a pro forma Form 1120, reporting transactions between the LLC and its foreign owner. Failure to file triggers a $25,000 penalty per year.&lt;/p&gt;

&lt;h3&gt;
  
  
  Under HMRC
&lt;/h3&gt;

&lt;p&gt;HMRC treats the LLC as a foreign company. The $80,000 distribution is characterized as a dividend from an overseas company.&lt;/p&gt;

&lt;p&gt;The founder reports this on the Self Assessment tax return under foreign income. The tax treatment of the dividend depends on the founder's UK income level:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic rate (up to 50,270 GBP):&lt;/strong&gt; 8.75% on dividends above the 1,000 GBP dividend allowance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Higher rate (50,271-125,140 GBP):&lt;/strong&gt; 33.75%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional rate (above 125,140 GBP):&lt;/strong&gt; 39.35%&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Credit Problem
&lt;/h3&gt;

&lt;p&gt;If the founder paid zero US tax (because the income was not effectively connected), there is no US tax to credit against the UK liability. The UK taxes the full dividend at the applicable rate.&lt;/p&gt;

&lt;p&gt;If the founder did pay US tax, the founder has US tax on the individual's business income and UK tax on a corporate distribution. The foreign tax credit claim on form SA106 is available for US tax paid, but the credit is limited to the UK tax attributable to the same income. Because the income characterization differs, HMRC may restrict the credit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison: US LLC Tax Treatment -- UK vs. US Perspective
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;US (IRS) View&lt;/th&gt;
&lt;th&gt;UK (HMRC) View&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entity classification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Disregarded entity (default SMLLC)&lt;/td&gt;
&lt;td&gt;Opaque / body corporate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Income attribution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Passes through to individual member&lt;/td&gt;
&lt;td&gt;Stays within the entity until distributed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tax event for member&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Income earned = taxable to member&lt;/td&gt;
&lt;td&gt;Distribution received = taxable to member&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Income characterization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Business income / self-employment income&lt;/td&gt;
&lt;td&gt;Dividend income from foreign company&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Applicable tax rates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;US graduated rates (if ECI) or 0% (if not ECI)&lt;/td&gt;
&lt;td&gt;UK dividend rates: 8.75% / 33.75% / 39.35%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Filing form (member)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Form 1040-NR (individual)&lt;/td&gt;
&lt;td&gt;SA100 + SA106 (foreign income)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Treaty article for relief&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Article 7 (business profits) or Article 22&lt;/td&gt;
&lt;td&gt;Article 10 (dividends) or Article 22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foreign tax credit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;N/A (US is source country)&lt;/td&gt;
&lt;td&gt;FTCR on SA106, limited to UK tax on that income&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Alternative: UK Ltd with US Operations
&lt;/h2&gt;

&lt;p&gt;The classification mismatch exists because the US LLC is transparent for IRS purposes and opaque for HMRC purposes. A UK limited company (Ltd) avoids this particular problem.&lt;/p&gt;

&lt;p&gt;The UK founder forms a UK Ltd and operates their SaaS business through it. The Ltd is the operating entity -- it invoices clients, holds intellectual property, and employs (or contracts with) the founder. If the business has US clients or US operations, the Ltd can register as a foreign entity in a US state and open a US bank account without forming a separate US entity.&lt;/p&gt;

&lt;p&gt;There is no classification mismatch. Both HMRC and the IRS see the same entity type -- a foreign corporation. The treaty's provisions for eliminating double taxation align because both countries classify the entity the same way.&lt;/p&gt;

&lt;p&gt;A UK Ltd adds administrative overhead: annual accounts filed with Companies House, Corporation Tax returns, payroll administration for the founder's salary, and compliance with UK employment law. For founders with very low revenue or who are testing a business idea, the overhead may exceed the benefit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;HMRC classifies US LLCs as opaque entities -- treated as foreign companies, not pass-through vehicles -- based on the LLC's legal characteristics&lt;/li&gt;
&lt;li&gt;The IRS treats the same single-member LLC as a disregarded entity, attributing all income to the individual member -- this creates a classification mismatch between the two jurisdictions&lt;/li&gt;
&lt;li&gt;The US-UK Double Taxation Convention's credit mechanism may not fully resolve the mismatch, because the US taxes business income of an individual while the UK taxes dividend income from a foreign company&lt;/li&gt;
&lt;li&gt;UK residents report LLC distributions on SA106 as dividends from a foreign company, subject to dividend tax rates (8.75% / 33.75% / 39.35%) rather than trading income rates&lt;/li&gt;
&lt;li&gt;A UK Ltd operating in the US avoids the classification mismatch entirely -- both HMRC and the IRS classify it as a foreign corporation, and the treaty provisions align&lt;/li&gt;
&lt;li&gt;Form 5472 filing obligations remain regardless of how HMRC classifies the LLC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.globalsolo.global/blog/hmrc-us-llc-tax-reporting-uk-residents-2026" rel="noopener noreferrer"&gt;Read the full article with FAQ on self-assessment amendments, anti-avoidance rules, and split-year treatment&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.globalsolo.global" rel="noopener noreferrer"&gt;Global Solo&lt;/a&gt; -- structural risk visibility for cross-border founders.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tax</category>
      <category>uk</category>
      <category>llc</category>
      <category>crossborder</category>
    </item>
    <item>
      <title>Miss Form 5472? The $25,000 IRS Penalty for Non-Resident LLCs</title>
      <dc:creator>Jett Fu</dc:creator>
      <pubDate>Sat, 04 Apr 2026 04:46:18 +0000</pubDate>
      <link>https://dev.to/jettfu/miss-form-5472-the-25000-irs-penalty-for-non-resident-llcs-123d</link>
      <guid>https://dev.to/jettfu/miss-form-5472-the-25000-irs-penalty-for-non-resident-llcs-123d</guid>
      <description>&lt;p&gt;Form 5472 is the most expensive compliance gap in non-resident LLC ownership. Not because the form is hard to prepare, but because the penalty for missing it is $25,000 per form, per year. Most non-resident LLC owners do not know this form exists until they receive a notice or learn about it from another founder who already paid the penalty.&lt;/p&gt;

&lt;p&gt;The IRS assesses a $25,000 penalty for each Form 5472 that is not filed, filed late, or filed with substantially incomplete information. Every foreign-owned single-member LLC is required to file Form 5472 annually with a pro forma Form 1120, regardless of whether the LLC had revenue, profit, or any business activity during the year. The filing is due on April 15 following the calendar year (with a possible 6-month extension to October 15). A founder who formed an LLC in 2024 and has never filed faces a potential $50,000+ in accumulated penalties by 2026.&lt;/p&gt;

&lt;p&gt;I have watched this penalty hit founders who had no idea the obligation existed. They formed their LLC through a reputable service, obtained an EIN, opened a bank account, and started operating. Nobody told them about Form 5472. Twelve to eighteen months later, an IRS notice arrived.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Form 5472?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.irs.gov/forms-pubs/about-form-5472" rel="noopener noreferrer"&gt;Form 5472&lt;/a&gt; is an IRS information return titled "Information Return of a 25% Foreign-Owned U.S. Corporation or a Foreign Corporation Engaged in a U.S. Trade or Business." Despite the title referencing corporations, it applies to foreign-owned single-member LLCs because the IRS treats these entities as corporations for Form 5472 reporting purposes under &lt;a href="https://www.ecfr.gov/current/title-26/chapter-I/subchapter-A/part-1/subject-group-ECFRb43c582aed31e5c/section-1.6038A-1" rel="noopener noreferrer"&gt;Treasury Regulation 1.6038A-1(c)(1)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The form reports "reportable transactions" between the LLC and its foreign owner. Reportable transactions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capital contributions&lt;/strong&gt; -- Money you put into the LLC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distributions&lt;/strong&gt; -- Money you take out of the LLC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loans&lt;/strong&gt; -- Money borrowed or lent between you and the LLC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rent or lease payments&lt;/strong&gt; -- If the LLC uses your personal assets or vice versa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service payments&lt;/strong&gt; -- If the LLC pays you (or you pay the LLC) for services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any other monetary transaction&lt;/strong&gt; between the LLC and its 25%+ foreign owner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you formed a US LLC, put money into it, or took money out of it, you had a reportable transaction. That means the filing requirement was triggered from the moment you funded the LLC's bank account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who has to file Form 5472?
&lt;/h2&gt;

&lt;p&gt;Every US LLC that is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A single-member LLC (or treated as a disregarded entity)&lt;/li&gt;
&lt;li&gt;Owned by a foreign person (non-US citizen, non-US resident alien, or foreign entity)&lt;/li&gt;
&lt;li&gt;Has had at least one "reportable transaction" during the tax year&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The definition of "foreign person" includes anyone who is not a US citizen and does not have a green card or meet the substantial presence test. If you formed a US LLC from outside the US and you are not a US person, you have a Form 5472 filing obligation.&lt;/p&gt;

&lt;p&gt;The form is filed with a &lt;strong&gt;pro forma Form 1120&lt;/strong&gt; (US Corporation Income Tax Return). The Form 1120 itself shows zeros for income and tax -- it exists only as the vehicle to attach Form 5472. The two forms are filed together as a single submission.&lt;/p&gt;

&lt;h2&gt;
  
  
  When is Form 5472 due?
&lt;/h2&gt;

&lt;p&gt;The filing deadline is &lt;strong&gt;April 15&lt;/strong&gt; following the end of the calendar year. A Form 5472 for the 2025 tax year is due &lt;strong&gt;April 15, 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An automatic 6-month extension is available by filing &lt;a href="https://www.irs.gov/forms-pubs/about-form-7004" rel="noopener noreferrer"&gt;Form 7004&lt;/a&gt; before the April 15 deadline. This extends the due date to &lt;strong&gt;October 15&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The filing starts from the year the LLC was formed, not the year it started earning revenue. An LLC formed in September 2025 with no revenue and one $500 capital contribution has a Form 5472 filing obligation for the 2025 tax year, due April 15, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  The $25,000 penalty: how it works
&lt;/h2&gt;

&lt;p&gt;The penalty is prescribed by &lt;a href="https://www.law.cornell.edu/uscode/text/26/6038A" rel="noopener noreferrer"&gt;IRC Section 6038A(d)&lt;/a&gt;. The IRS assesses $25,000 for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Failure to file&lt;/strong&gt; -- The form was not submitted at all&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Late filing&lt;/strong&gt; -- The form was submitted after the deadline (including extension)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Substantially incomplete filing&lt;/strong&gt; -- The form was submitted but missing material information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The penalty is &lt;strong&gt;per form, per year&lt;/strong&gt;. If you have one LLC and missed two years, the potential penalty is $50,000. If you have two LLCs and missed one year for each, the potential penalty is also $50,000.&lt;/p&gt;

&lt;p&gt;After the initial $25,000 assessment, the IRS sends a notice demanding compliance. If the form is not filed within 90 days of the notice, an additional $25,000 penalty accrues for each 30-day period of continued non-compliance. The penalty has no statutory maximum.&lt;/p&gt;

&lt;h3&gt;
  
  
  Penalty timeline example
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Penalty exposure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLC formed in 2024, no Form 5472 filed for 2024&lt;/td&gt;
&lt;td&gt;$25,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025 passes, no Form 5472 filed for 2025 either&lt;/td&gt;
&lt;td&gt;$50,000 cumulative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IRS notice received in 2026, 90-day clock starts&lt;/td&gt;
&lt;td&gt;$50,000 + accruing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;120 days after notice, still not filed&lt;/td&gt;
&lt;td&gt;$50,000 + $25,000 additional = $75,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are statutory penalties. The IRS has the authority to assess them without proving intent or harm.&lt;/p&gt;

&lt;h2&gt;
  
  
  What triggers IRS awareness?
&lt;/h2&gt;

&lt;p&gt;The IRS may become aware of a missing Form 5472 through several channels:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EIN records.&lt;/strong&gt; When the LLC applied for an EIN using Form SS-4, the IRS recorded the responsible party as a foreign person. The IRS cross-references EIN records against filed returns. An EIN with a foreign responsible party and no corresponding Form 1120 + Form 5472 is a data match.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bank account reporting.&lt;/strong&gt; US banks report account holder information to the IRS. A US bank account held by an LLC with a foreign owner generates information that can be matched against filed returns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FATCA and information exchange.&lt;/strong&gt; Under the &lt;a href="https://www.oecd.org/en/topics/policy-issues/automatic-exchange-of-information.html" rel="noopener noreferrer"&gt;Common Reporting Standard (CRS)&lt;/a&gt; and &lt;a href="https://www.irs.gov/businesses/corporations/foreign-account-tax-compliance-act-fatca" rel="noopener noreferrer"&gt;FATCA&lt;/a&gt;, financial institutions in participating countries report account information to tax authorities, which share it with the IRS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Formation service records.&lt;/strong&gt; Formation services like Stripe Atlas, Firstbase, and Doola file formation documents with state secretaries of state. State records are accessible to the IRS.&lt;/p&gt;

&lt;p&gt;The detection is not instant. But it is increasingly automated. The gap between formation and enforcement has narrowed over the past several years.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can the penalty be reduced or removed?
&lt;/h2&gt;

&lt;p&gt;The IRS has discretion to abate (reduce or remove) penalties in specific circumstances:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reasonable cause.&lt;/strong&gt; If the founder can demonstrate that the failure was due to reasonable cause and not willful neglect, the IRS may abate the penalty. "I didn't know about the form" is a weak argument but not automatically disqualifying -- it depends on the totality of the circumstances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First-time penalty abatement.&lt;/strong&gt; The IRS offers administrative first-time penalty abatement for certain penalties, but Form 5472 penalties fall under IRC 6038A, and the first-time abatement program does not automatically apply to information return penalties.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streamlined filing.&lt;/strong&gt; For US persons living abroad who have been non-willful in their failure to file, the &lt;a href="https://www.irs.gov/individuals/international-taxpayers/streamlined-filing-compliance-procedures" rel="noopener noreferrer"&gt;Streamlined Filing Compliance Procedures&lt;/a&gt; may provide a path to compliance with reduced penalties.&lt;/p&gt;

&lt;p&gt;The key point: penalty abatement is discretionary, not automatic. Filing late is less expensive than not filing at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much does it cost to file Form 5472?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filing method&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CPA (standalone)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$500-2,000/yr&lt;/td&gt;
&lt;td&gt;Varies by complexity of reportable transactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Firstbase add-on&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$899/yr&lt;/td&gt;
&lt;td&gt;Includes Form 5472 + pro forma 1120&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Doola Total Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$1,999/yr&lt;/td&gt;
&lt;td&gt;Includes Form 5472 + bookkeeping + tax filing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Self-preparation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Possible but carries accuracy risk; the form is not intuitive&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The cost of preparing Form 5472 is a fraction of the penalty for not filing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The IRS penalty for a missing or late Form 5472 is $25,000 per form, per year. A founder who misses two years faces $50,000+ in accumulated penalties before any other consequence.&lt;/li&gt;
&lt;li&gt;Every foreign-owned single-member LLC must file Form 5472 annually with a pro forma Form 1120, regardless of whether the LLC had revenue. The obligation starts from the year of formation.&lt;/li&gt;
&lt;li&gt;Filing costs $500-2,000/yr through a CPA, $899/yr through Firstbase, or $1,999/yr through Doola's Total Compliance tier. None of the major formation services include it in their base formation price.&lt;/li&gt;
&lt;li&gt;Penalty abatement is possible through reasonable cause or streamlined filing, but it is discretionary. Filing late is always less expensive than not filing at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.globalsolo.global/blog/what-happens-if-you-miss-form-5472-non-resident-llc" rel="noopener noreferrer"&gt;Read the full article with FAQs on filing methods, formation service coverage, and late filing strategies&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.globalsolo.global" rel="noopener noreferrer"&gt;Global Solo&lt;/a&gt; -- structural risk visibility for cross-border founders.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tax</category>
      <category>llc</category>
      <category>startup</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Business Account Frozen: What Triggers Freezes and What They Reveal</title>
      <dc:creator>Jett Fu</dc:creator>
      <pubDate>Sat, 04 Apr 2026 04:45:13 +0000</pubDate>
      <link>https://dev.to/jettfu/business-account-frozen-what-triggers-freezes-and-what-they-reveal-5gd8</link>
      <guid>https://dev.to/jettfu/business-account-frozen-what-triggers-freezes-and-what-they-reveal-5gd8</guid>
      <description>&lt;p&gt;The email arrives at 3 AM local time. Subject line: "Action Required: Account Access Temporarily Restricted." By the time most founders see it, their business account has been frozen for six hours. Payments stopped processing. Invoices suspended. Revenue flow interrupted mid-stream.&lt;/p&gt;

&lt;p&gt;The freeze itself is mechanical. A risk threshold was crossed -- often under the &lt;a href="https://www.fincen.gov/resources/statutes-and-regulations/bank-secrecy-act" rel="noopener noreferrer"&gt;Bank Secrecy Act&lt;/a&gt; framework enforced by &lt;a href="https://www.fincen.gov" rel="noopener noreferrer"&gt;FinCEN&lt;/a&gt;. An algorithm triggered. A compliance team flagged something for review. But the structural exposure the freeze reveals existed long before the notification. The documentation gap was always there. The entity-income mismatch was present from the first transaction. The jurisdictional ambiguity was embedded in the original setup.&lt;/p&gt;

&lt;p&gt;The freeze did not create these conditions. It made them suddenly, acutely visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  "It works" is not a structural assessment
&lt;/h2&gt;

&lt;p&gt;Banks process transactions based on initial account setup information without continuously validating whether the business structure still matches current operations.&lt;/p&gt;

&lt;p&gt;When everything functions smoothly, the gap between declared structure and operational reality feels inconsequential. The account was opened with certain information. The business evolved. New activities, new geographies, new transaction patterns developed. But the bank's understanding of the relationship still reflects the original setup.&lt;/p&gt;

&lt;p&gt;This is the core of the banking stability illusion: the account functions because nothing has triggered a review, not because the underlying arrangement has been validated against current reality.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.fdic.gov" rel="noopener noreferrer"&gt;FDIC&lt;/a&gt; insures deposits, but deposit insurance does not protect against account restrictions triggered by compliance reviews. Initial acceptance is not ongoing validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How misalignment accumulates
&lt;/h2&gt;

&lt;p&gt;The most common structural misalignment in business banking involves three geographies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where the &lt;strong&gt;business entity&lt;/strong&gt; is registered&lt;/li&gt;
&lt;li&gt;Where the &lt;strong&gt;founder&lt;/strong&gt; actually lives and works&lt;/li&gt;
&lt;li&gt;Where the &lt;strong&gt;bank account&lt;/strong&gt; is located&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When all three align, the banking structure is straightforward. When they diverge -- an entity in one jurisdiction, a bank account in another, a founder who is a tax resident of a third -- the arrangement contains structural characteristics that may become relevant during a review.&lt;/p&gt;

&lt;p&gt;Each decision was likely made for practical reasons. The entity was formed where it made regulatory or tax sense. The bank account was opened where access was easiest. The founder lives where life circumstances dictate. But the combination creates a cross-jurisdictional arrangement whose structural implications may not have been examined.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entity Registered&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Delaware&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Founder Tax Resident&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Portugal&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bank Account&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;US&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gap Between&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bank Profile &amp;amp; Actual Activity&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What a freeze actually exposes
&lt;/h2&gt;

&lt;p&gt;A frozen account is a liquidity event, but the structural questions it surfaces are not primarily about cash. The freeze reveals gaps in how the business is architectured relative to how it operates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entity-income mismatches become visible.&lt;/strong&gt; Revenue flows into an entity that does not match the entity delivering services. The account sits in one jurisdiction, the contracting entity in another, and the physical location of work in a third.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single-point-of-failure banking surfaces.&lt;/strong&gt; A structure that routes 100% of revenue through one payment processor or one business account has no redundancy. The moment all revenue stops because one rail went down, the absence of structural diversification becomes measurable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation gaps appear immediately.&lt;/strong&gt; Can the entity-income relationship be explained in a way that is coherent to a third party? Is there a paper trail that shows why funds flow where they flow?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jurisdictional ambiguity becomes a blocking issue.&lt;/strong&gt; Where is the business actually resident? Where are services delivered? Where does liability sit? A freeze converts latent jurisdictional uncertainty into an acute diagnostic question.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four structural questions
&lt;/h2&gt;

&lt;p&gt;When an account freezes, operational responses focus on unlocking access. The structural dimension is different. It asks: what does this event reveal about the overall architecture?&lt;/p&gt;

&lt;h3&gt;
  
  
  Money: Where does revenue actually flow?
&lt;/h3&gt;

&lt;p&gt;A freeze interrupts payment flow. The interruption exposes the path revenue was taking. Which entity receives income? Which accounts process transactions? What percentage of total revenue depends on this single rail?&lt;/p&gt;

&lt;p&gt;If the frozen account represents 100% of income, the structure has no redundancy. If it represents 40%, the business has partial insulation. The percentage is diagnostic information.&lt;/p&gt;

&lt;h3&gt;
  
  
  Entity: Does the entity receiving payment match the entity delivering services?
&lt;/h3&gt;

&lt;p&gt;An account belongs to a legal entity. The freeze hits that entity. The structural question: is this the same entity that contracts with clients? Is it the same entity that delivers services? Is it the same entity that files taxes?&lt;/p&gt;

&lt;p&gt;Mismatch is common in cross-border solo setups. A US LLC receives payments, a Portuguese sole trader delivers services, and a US individual files personal taxes. This configuration can be structurally coherent if the relationships between entities are documented. It becomes incoherent if the relationships are unclear.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tax: Is the tax filing position consistent with where the account sits?
&lt;/h3&gt;

&lt;p&gt;A frozen account does not trigger a tax audit, but it exposes whether the tax position aligns with the banking structure. Tax residency, entity location, and banking location do not need to be identical. They do need to be coherent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accountability: Can the structure be explained to a third party?
&lt;/h3&gt;

&lt;p&gt;A freeze converts a theoretical question into a practical one: if asked to explain this structure to someone who does not know you, can you do it?&lt;/p&gt;

&lt;p&gt;Entity A exists because X. Funds flow to Account B because Y. Services are delivered from Location C because Z. The connections need to make sense. The explanation does not need to be simple. It needs to be documented and internally consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why compliant founders still get frozen
&lt;/h2&gt;

&lt;p&gt;A founder can be fully compliant with local tax law, properly registered, and filing on time, and still trigger a payment freeze. This is not a contradiction. It is a difference in what each system is measuring.&lt;/p&gt;

&lt;p&gt;Compliance operates on rules: does the setup match the legal requirements in Jurisdiction X? Risk scoring -- governed by frameworks like the &lt;a href="https://www.occ.treas.gov/topics/supervision-and-examination/bsa/index-bsa.html" rel="noopener noreferrer"&gt;OCC's BSA/AML guidance&lt;/a&gt; -- operates on patterns: does this account's behavior match patterns associated with fraud, money laundering, or regulatory violations?&lt;/p&gt;

&lt;p&gt;Common triggers that flag compliant businesses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High average transaction values relative to baseline&lt;/li&gt;
&lt;li&gt;Cross-border transactions involving jurisdictions with elevated scrutiny&lt;/li&gt;
&lt;li&gt;Business models difficult to categorize&lt;/li&gt;
&lt;li&gt;Seasonal spikes that look anomalous to an algorithm&lt;/li&gt;
&lt;li&gt;Rapid growth in transaction volume or geographic reach&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The account holder cannot see the risk model. The processor is not obligated to explain it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 48-hour structural audit
&lt;/h2&gt;

&lt;p&gt;When an account freezes, the immediate response is operational: gather documents, contact support, identify the specific reason. This is necessary but not sufficient.&lt;/p&gt;

&lt;p&gt;The structural response asks: independent of this specific freeze, what does this event reveal about the overall setup?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Revenue concentration:&lt;/strong&gt; What percentage of total income flows through this account? What happens if this rail is down for 30 days?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entity coherence:&lt;/strong&gt; Does the entity on the account match the entity contracting with clients? Can this relationship be documented?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jurisdictional alignment:&lt;/strong&gt; Do tax filings, entity registration, and banking location tell a consistent story?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation completeness:&lt;/strong&gt; Can the business structure be explained in writing to someone unfamiliar with it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The answers describe the structure as it exists, not as it was intended. The freeze makes the actual structure visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Banking stability means the account functions because nothing has triggered a review, not because the arrangement has been validated against current reality&lt;/li&gt;
&lt;li&gt;The most common structural misalignment involves three divergent geographies: entity registration, founder residency, and bank account location&lt;/li&gt;
&lt;li&gt;A payment freeze compresses the timeline for understanding structural exposure from months to hours -- the gaps it reveals were present before the event&lt;/li&gt;
&lt;li&gt;Compliance and platform risk scoring measure different things -- a structurally compliant setup can still trigger algorithmic flags&lt;/li&gt;
&lt;li&gt;Non-resident accounts experience "structural drift" as the business evolves while the bank's profile stays frozen at application time&lt;/li&gt;
&lt;li&gt;Documentation gaps that are invisible during normal operation become immediately visible during a freeze&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.globalsolo.global/blog/business-account-frozen-structural-diagnostic" rel="noopener noreferrer"&gt;Read the full article with additional sections on non-resident risk, cascade effects, and recovery timelines&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.globalsolo.global" rel="noopener noreferrer"&gt;Global Solo&lt;/a&gt; -- structural risk visibility for cross-border founders.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>banking</category>
      <category>fintech</category>
      <category>startup</category>
      <category>crossborder</category>
    </item>
    <item>
      <title>How We Built a Deterministic Risk Scoring Engine (No ML Required)</title>
      <dc:creator>Jett Fu</dc:creator>
      <pubDate>Mon, 30 Mar 2026 07:24:52 +0000</pubDate>
      <link>https://dev.to/jettfu/httpswwwglobalsologlobaltoolsrisk-checkhow-we-built-a-deterministic-risk-scoring-engine-no-2f1k</link>
      <guid>https://dev.to/jettfu/httpswwwglobalsologlobaltoolsrisk-checkhow-we-built-a-deterministic-risk-scoring-engine-no-2f1k</guid>
      <description>&lt;p&gt;When we set out to build a risk screening tool for cross-border founders, the obvious path was to throw an LLM at it. Feed in the founder's situation, get back a risk assessment. Ship it.&lt;/p&gt;

&lt;p&gt;We went the opposite direction: a pure client-side, deterministic, rule-based scoring engine. No API calls. No ML models. No LLM. Same input always produces the same output.&lt;/p&gt;

&lt;p&gt;Here's why, and how the engine works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why deterministic &amp;gt; intelligent
&lt;/h2&gt;

&lt;p&gt;Our product maps structural risk across four dimensions for solo founders operating businesses across borders. The core principle: &lt;strong&gt;determinism in analysis, intelligence in interaction&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For a risk screening tool, this means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A founder in India with a Delaware LLC and Stripe-only payments should get the &lt;strong&gt;exact same score&lt;/strong&gt; every time&lt;/li&gt;
&lt;li&gt;No temperature variance, no model drift, no "it depends on how the LLM is feeling today"&lt;/li&gt;
&lt;li&gt;The scoring logic is auditable — you can trace every point back to a specific rule&lt;/li&gt;
&lt;li&gt;It runs entirely client-side — no server costs, no latency, no API rate limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the output affects how someone understands their legal and financial exposure, hallucination isn't a minor inconvenience. It's a liability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture
&lt;/h2&gt;

&lt;p&gt;The engine scores 7 inputs across 4 dimensions (we call them META: Money, Entity, Tax, Accountability). Each dimension gets a score from 0-5, totaling 0-20.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;RiskCheckAnswers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;residenceCountry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;citizenships&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;entityCountry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// "none" if no entity&lt;/span&gt;
  &lt;span class="nl"&gt;incomeCountries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;annualRevenue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;under-25k&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;25k-50k&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;50k-100k&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;100k-250k&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;250k-plus&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;paymentMethods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;daysAbroad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;under-30&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;30-90&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;90-183&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;183-plus&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;RiskCheckResult&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;money&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DimensionScore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DimensionScore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;tax&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DimensionScore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;accountability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DimensionScore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;totalScore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;riskLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;low&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;moderate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;high&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;critical&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The main scoring function delegates to four dimension-specific scorers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scoreRiskCheck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RiskCheckAnswers&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;RiskCheckResult&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;money&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;scoreMoney&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;entity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;scoreEntity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;scoreTax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;accountability&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;scoreAccountability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;totalScore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;money&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;tax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;accountability&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;riskLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RiskCheckResult&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;riskLevel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;totalScore&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;riskLevel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;low&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;totalScore&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;riskLevel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;moderate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;totalScore&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;riskLevel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;high&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;riskLevel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;critical&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;money&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;accountability&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;totalScore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;riskLevel&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How scoring works: pattern matching, not prediction
&lt;/h2&gt;

&lt;p&gt;Each dimension scorer follows the same pattern: check for structural conditions, accumulate points, cap at 5.&lt;/p&gt;

&lt;p&gt;Here's the Money dimension as an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scoreMoney&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RiskCheckAnswers&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;DimensionScore&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RiskFlag&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

  &lt;span class="c1"&gt;// Single payment rail — if Stripe freezes, 100% of income stops&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;paymentMethods&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;m-single-rail&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;dimension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;warning&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Single Payment Rail Dependency&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;All revenue flows through one payment method...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// No entity but earning income — no liability boundary&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entityCountry&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;incomeCountries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;m-no-entity&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;dimension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;critical&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No Entity Boundary for Income&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Income flows directly to you as an individual...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;flags&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key design decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Each rule is independent&lt;/strong&gt; — no cascading dependencies between rules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flags carry context&lt;/strong&gt; — every score point comes with an explanation and severity level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scores are capped&lt;/strong&gt; — &lt;code&gt;Math.min(score, 5)&lt;/code&gt; prevents any single dimension from dominating&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No weights&lt;/strong&gt; — each rule contributes a fixed number of points. Weights add complexity without adding clarity when you have &amp;lt;20 rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The flag system
&lt;/h2&gt;

&lt;p&gt;Every score point generates a &lt;code&gt;RiskFlag&lt;/code&gt; with structured metadata:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;RiskFlag&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                          &lt;span class="c1"&gt;// Unique identifier&lt;/span&gt;
  &lt;span class="nl"&gt;dimension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;E&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;T&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Which META dimension&lt;/span&gt;
  &lt;span class="nl"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;info&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;warning&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;critical&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;articleSlug&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                &lt;span class="c1"&gt;// Links to educational content&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;articleSlug&lt;/code&gt; is key to the UX: every risk flag links to an in-depth article explaining that specific structural pattern. The scoring engine doesn't give advice — it surfaces structural conditions and points to educational content.&lt;/p&gt;

&lt;p&gt;This is an intentional boundary: &lt;strong&gt;the engine observes and describes, it never recommends.&lt;/strong&gt; "You have a single payment rail" is a structural observation. "You should add a second payment processor" is advice. We only do the first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-border pattern detection
&lt;/h2&gt;

&lt;p&gt;The most interesting scoring rules involve cross-jurisdictional patterns that most founders don't think about:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entity-residence mismatch:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Entity in different country than residence&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entityCountry&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entityCountry&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;residenceCountry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;e-entity-residence-mismatch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;warning&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Entity-Residence Mismatch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Your entity is registered in a different country than where you live...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A founder in Portugal with a Delaware LLC triggers this. It's not "wrong" — it's the most common setup for non-resident founders. But it creates questions about effective management, permanent establishment risk, and which jurisdiction's tax rules apply. The flag surfaces this so the founder knows it's a structural characteristic worth understanding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 183-day rule trap:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;daysAbroad&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;183-plus&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;t-extended-abroad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;warning&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Extended Time Abroad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Spending 183+ days outside your residence country may trigger tax residency questions...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Digital nomads assume 183 days = tax-free. In reality, 183 days is one of many factors in tax residency determination, and different countries count them differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we'd change
&lt;/h2&gt;

&lt;p&gt;After running this in production for several months:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Weighted scoring would help at scale.&lt;/strong&gt; With ~15 rules, fixed points work fine. If we expand to 50+ rules, some should matter more than others.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Country-specific rule sets.&lt;/strong&gt; Currently, rules are universal. A US citizen abroad triggers FATCA/FBAR rules that don't apply to anyone else. Country-specific scoring branches would be more precise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The 7-question limit is both a feature and a constraint.&lt;/strong&gt; It keeps the tool fast (2 minutes), but it means we can't detect some patterns that require more granular input.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; with App Router (React 19)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript strict mode&lt;/strong&gt; — the type system catches scoring logic errors at compile time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pure client-side execution&lt;/strong&gt; — the scoring engine imports no server dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vitest&lt;/strong&gt; for unit testing — each scoring rule has test cases for boundary conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full risk check is live at &lt;a href="https://www.globalsolo.global/tools/risk-check" rel="noopener noreferrer"&gt;globalsolo.global/tools/risk-check&lt;/a&gt;. It takes about 2 minutes and generates a shareable scorecard.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use rules vs. ML vs. LLM
&lt;/h2&gt;

&lt;p&gt;Our approach works because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The domain has &lt;strong&gt;clear, codifiable rules&lt;/strong&gt; (tax thresholds, jurisdictional requirements)&lt;/li&gt;
&lt;li&gt;The input space is &lt;strong&gt;bounded&lt;/strong&gt; (7 structured questions, not free text)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproducibility matters more than nuance&lt;/strong&gt; — a founder checking their risk twice should get the same answer&lt;/li&gt;
&lt;li&gt;The audience is &lt;strong&gt;making real decisions&lt;/strong&gt; based on the output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your domain has fuzzy inputs, requires natural language understanding, or benefits from creative interpretation, ML/LLM is the right tool. If your domain has clear rules and your users need to trust the output, consider starting with deterministic scoring and adding intelligence at the interaction layer.&lt;/p&gt;

&lt;p&gt;We use LLMs elsewhere in our stack — for generating narrative sections of paid diagnostic reports, where the scoring is still deterministic but the &lt;em&gt;explanation&lt;/em&gt; benefits from natural language. The principle: &lt;strong&gt;determinism in analysis, intelligence in interaction.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://www.globalsolo.global/about/jett-fu" rel="noopener noreferrer"&gt;Jett Fu&lt;/a&gt; at &lt;a href="https://www.globalsolo.global" rel="noopener noreferrer"&gt;Global Solo&lt;/a&gt; — structural risk visibility for cross-border founders.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
