diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index d0cf367a..556e565c 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -72,7 +72,7 @@ jobs: tags: | type=ref,event=branch type=ref,event=pr - type=sha,prefix={{branch}}- + type=sha,prefix=sha- type=raw,value=latest,enable={{is_default_branch}} - name: Build and push @@ -115,7 +115,7 @@ jobs: tags: | type=ref,event=branch type=ref,event=pr - type=sha,prefix={{branch}}- + type=sha,prefix=sha- type=raw,value=latest,enable={{is_default_branch}} - name: Build and push @@ -159,7 +159,7 @@ jobs: tags: | type=ref,event=branch type=ref,event=pr - type=sha,prefix={{branch}}- + type=sha,prefix=sha- type=raw,value=latest,enable={{is_default_branch}} - name: Build and push @@ -217,7 +217,7 @@ jobs: tags: | type=ref,event=branch type=ref,event=pr - type=sha,prefix={{branch}}- + type=sha,prefix=sha- type=raw,value=latest,enable={{is_default_branch}} - name: Check if Dockerfile exists diff --git a/package-lock.json b/package-lock.json index 0a0a2edd..c9b9d3b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -434,6 +434,7 @@ "version": "7.28.5", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1876,6 +1877,7 @@ "version": "6.21.0", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -2041,6 +2043,7 @@ "version": "8.15.0", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2406,6 +2409,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", @@ -3124,6 +3128,7 @@ "version": "8.57.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -4469,6 +4474,7 @@ "version": "29.7.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -7458,6 +7464,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -7592,6 +7599,7 @@ "version": "5.9.3", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/portal/CloudHealthOffice.Portal/Pages/Welcome.razor b/portal/CloudHealthOffice.Portal/Pages/Welcome.razor index 070ff380..ba4a93a7 100644 --- a/portal/CloudHealthOffice.Portal/Pages/Welcome.razor +++ b/portal/CloudHealthOffice.Portal/Pages/Welcome.razor @@ -1,5 +1,6 @@ @page "/welcome" @using Microsoft.AspNetCore.Authorization +@using System.ComponentModel.DataAnnotations @inject NavigationManager Navigation @attribute [AllowAnonymous] @@ -12,150 +13,135 @@ *@ -
- -
-
- -

Cloud Health Office

-

The #1 Open-Source Azure-Native Multi-Payer EDI Platform

-

- Process claims, verify eligibility, manage prior authorizations, and handle all X12 EDI transactions - in a production-grade, HIPAA-compliant cloud platform. -

- -

✓ < 1-hour onboarding · ✓ Zero custom code · ✓ Production-grade HIPAA

-
-
+ +
+
+ +

Welcome to Cloud Health Office

+

Your Complete EDI Transaction Suite for Efficient Health Plan Management

+ Sign Up Now +
+
- -
-
-

Complete EDI Transaction Suite

-
-
-
📋
-

Claims Processing

-

837 Professional & Institutional claims submission, 835 ERA processing, real-time adjudication

-
-
-
-

Eligibility Verification

-

270/271 real-time eligibility inquiries, benefit coverage details, plan information

-
-
-
🔐
-

Prior Authorization

-

278 authorization requests and responses, automated workflow routing, status tracking

-
-
-
📎
-

Claim Attachments

-

275/276/277 unsolicited and solicited attachments, FHIR integration, automated delivery

-
-
-
👥
-

Member Enrollment

-

834 enrollment transactions, member demographics, coverage updates, sponsor management

-
-
-
📊
-

Claim Status

-

276/277 claim status inquiries and responses, tracking, reporting

-
+ +
+
+

Our Key Features

+
+
+
📋
+

Claims Processing

+

837 Professional & Institutional claims submission, 835 ERA processing, and real-time adjudication.

+
+
+
+

Eligibility Verification

+

270/271 real-time eligibility inquiries, benefit coverage details, and plan information.

+
+
+
🔐
+

Prior Authorization

+

278 authorization requests and responses, automated workflow routing, and status tracking.

+
+
+
📎
+

Claim Attachments

+

275 claim attachments (unsolicited and solicited), FHIR integration, and automated delivery.

+
+
+
👥
+

Member Enrollment

+

834 enrollment transactions, member demographics, coverage updates, and sponsor management.

+
+
+
📊
+

Claim Status

+

276/277 claim status inquiries and responses, tracking, and reporting.

-
+
+
- -
-
-

Simple, Transparent Pricing

-
-
-

Starter

-

$499/month

-
    -
  • Up to 10,000 claims/month
  • -
  • Core EDI transactions (837, 835)
  • -
  • Email support
  • -
  • Standard SLA
  • -
- Get Started + +
+
+

Trusted by Leading Health Plans

+
+
+
+

"Reduced prior authorization turnaround from 12 days to under 2 minutes"

+

— Regional Health Plan (450K members)

- +
+
+

"Processing 2.3M claims/month with 99.97% accuracy"

+

— Multi-State Medicaid MCO

-
-

Enterprise

-

Custom

-
    -
  • Unlimited claims
  • -
  • Dedicated infrastructure
  • -
  • 99.99% SLA guarantee
  • -
  • 24/7 phone support
  • -
  • Custom integrations
  • -
- Contact Sales +
+
+
+

"Went from contract signed to first claim in 47 minutes"

+

— Medicare Advantage Plan

-
+
+
- -
-
-

Trusted by Leading Health Plans

-
-
-

"Reduced prior authorization turnaround from 12 days to under 2 minutes"

-

— Regional Health Plan (450K members)

-
-
-

"Processing 2.3M claims/month with 99.97% accuracy"

-

— Multi-State Medicaid MCO

-
-
-

"Went from contract signed to first claim in 47 minutes"

-

— Medicare Advantage Plan

+ + + +
+
- -
-
-

Ready to modernize your EDI processing?

-

Join the future of payer integration. Start processing claims in under an hour.

- Start Free Trial -
-
+@code { + private SignupModel signupModel = new(); - - -
+ private class SignupModel + { + [Required(ErrorMessage = "Email address is required")] + [EmailAddress(ErrorMessage = "Invalid email address")] + public string Email { get; set; } = string.Empty; + + [Required(ErrorMessage = "Plan selection is required")] + public string Plan { get; set; } = "basic"; + } + + private Task HandleSignup() + { + // TODO: Integrate with Stripe API here + // For example, use JS Interop to call Stripe.js or server-side creation of Checkout Session + // This is a placeholder; implement actual signup logic + return Task.CompletedTask; + } +} diff --git a/portal/CloudHealthOffice.Portal/Pages/Welcome.razor.css b/portal/CloudHealthOffice.Portal/Pages/Welcome.razor.css index 221da4ef..384cc566 100644 --- a/portal/CloudHealthOffice.Portal/Pages/Welcome.razor.css +++ b/portal/CloudHealthOffice.Portal/Pages/Welcome.razor.css @@ -1,394 +1,105 @@ -.welcome-container { - min-height: 100vh; - background: #000000; - color: #ffffff; -} - +/* Hero Section - Sentinel Branding */ .hero { - background: linear-gradient(135deg, #000000 0%, #1a1a1a 50%, #000000 100%); - padding: 6rem 2rem; + background: #000000; + background-image: + radial-gradient(circle at 20% 50%, rgba(0, 255, 255, 0.03) 0%, transparent 50%), + radial-gradient(circle at 80% 80%, rgba(255, 0, 255, 0.03) 0%, transparent 50%); + color: white; + padding: 5rem 2rem; text-align: center; - border-bottom: 1px solid #333; -} - -.hero-content { - max-width: 900px; - margin: 0 auto; } .hero-logo { max-width: 250px; margin-bottom: 2rem; - filter: drop-shadow(0 0 30px rgba(0, 212, 255, 0.5)); -} - -.hero h1 { - font-size: 4rem; - font-weight: 700; - margin-bottom: 1rem; - background: linear-gradient(135deg, #ffffff 0%, #00d4ff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -}{ - "id": "my-test-org", - "tenantId": "my-test-org", - "azureTenantId": "32177734-051b-4fdc-9568-cc35530191b1", - "organizationName": "My Organization", - "subscriptionStatus": "Active", - "tier": "professional", - "isDemo": false, - "createdAt": "2026-02-08T00:00:00Z", - "updatedAt": "2026-02-08T00:00:00Z", - "adminEmails": ["YOUR_EMAIL@example.com"] + filter: drop-shadow(0 0 30px rgba(0, 255, 255, 0.5)); } -.hero-tagline { - font-size: 1.8rem; +.hero .display-4 { + font-weight: bold; margin-bottom: 1.5rem; - color: #00d4ff; - font-weight: 600; + color: #00ffff; + text-shadow: 0 0 20px rgba(0, 255, 255, 0.8); } -.hero-description { - font-size: 1.2rem; - line-height: 1.8; - margin-bottom: 3rem; - color: #b0b0b0; - max-width: 700px; - margin-left: auto; - margin-right: auto; -} - -.hero-cta { - display: flex; - gap: 1.5rem; - justify-content: center; +.hero .lead { + font-size: 1.5rem; margin-bottom: 2rem; - flex-wrap: wrap; -} - -.btn { - padding: 1rem 2.5rem; - border-radius: 8px; - font-size: 1.1rem; - font-weight: 600; - text-decoration: none; - transition: all 0.3s; - display: inline-block; -} - -.btn-primary-large { - background: linear-gradient(135deg, #00d4ff 0%, #0088cc 100%); - color: #ffffff; - border: none; -} - -.btn-primary-large:hover { - background: linear-gradient(135deg, #00e0ff 0%, #0099dd 100%); - transform: translateY(-3px); - box-shadow: 0 10px 30px rgba(0, 212, 255, 0.4); -} - -.btn-secondary-large { - background: transparent; - color: #ffffff; - border: 2px solid #ffffff; -} - -.btn-secondary-large:hover { - background: #ffffff; - color: #000000; -} - -.hero-note { - font-size: 0.95rem; - color: #00d4ff; -} - -.features { - padding: 6rem 2rem; - background: #0a0a0a; -} - -.features-container { - max-width: 1200px; - margin: 0 auto; -} - -.features h2 { - text-align: center; - font-size: 2.5rem; - margin-bottom: 4rem; - color: #ffffff; -} - -.feature-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; -} - -.feature-card { - background: #1a1a1a; - border: 1px solid #333; - border-radius: 12px; - padding: 2.5rem; - transition: all 0.3s; -} - -.feature-card:hover { - border-color: #00d4ff; - transform: translateY(-5px); - box-shadow: 0 10px 30px rgba(0, 212, 255, 0.2); + color: #b0b0b0; } +/* Feature Icons */ .feature-icon { font-size: 3rem; - margin-bottom: 1.5rem; -} - -.feature-card h3 { - font-size: 1.5rem; - margin-bottom: 1rem; - color: #00d4ff; -} - -.feature-card p { - color: #b0b0b0; - line-height: 1.6; -} - -.pricing { - padding: 6rem 2rem; - background: #000000; -} - -.pricing-container { - max-width: 1200px; - margin: 0 auto; -} - -.pricing h2 { - text-align: center; - font-size: 2.5rem; - margin-bottom: 4rem; - color: #ffffff; -} - -.pricing-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2rem; -} - -.pricing-card { - background: #1a1a1a; - border: 2px solid #333; - border-radius: 12px; - padding: 3rem 2rem; - text-align: center; - position: relative; -} - -.pricing-card.featured { - border-color: #00d4ff; - background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 100%); -} - -.badge { - position: absolute; - top: -15px; - left: 50%; - transform: translateX(-50%); - background: #00d4ff; - color: #000000; - padding: 0.5rem 1.5rem; - border-radius: 20px; - font-weight: 700; - font-size: 0.85rem; -} - -.pricing-card h3 { - font-size: 1.8rem; margin-bottom: 1rem; - color: #ffffff; -} - -.pricing-card .price { - font-size: 3rem; - font-weight: 700; - color: #00d4ff; - margin-bottom: 2rem; -} - -.pricing-card .price span { - font-size: 1.2rem; - color: #b0b0b0; } -.pricing-card ul { - list-style: none; - padding: 0; - margin-bottom: 2.5rem; - text-align: left; -} - -.pricing-card ul li { - padding: 0.75rem 0; - color: #b0b0b0; - border-bottom: 1px solid #333; -} - -.pricing-card ul li:before { - content: "✓ "; - color: #00d4ff; - font-weight: bold; - margin-right: 0.75rem; -} - -.btn-outline { - background: transparent; - color: #00d4ff; - border: 2px solid #00d4ff; -} - -.btn-outline:hover { - background: #00d4ff; - color: #000000; -} - -.btn-primary { - background: linear-gradient(135deg, #00d4ff 0%, #0088cc 100%); - color: #ffffff; - border: none; -} - -.btn-primary:hover { - background: linear-gradient(135deg, #00e0ff 0%, #0099dd 100%); -} - -.case-studies { - padding: 6rem 2rem; +/* Testimonials - Sentinel Branding */ +.testimonial { + padding: 2rem; background: #0a0a0a; -} - -.case-studies-container { - max-width: 1200px; - margin: 0 auto; -} - -.case-studies h2 { - text-align: center; - font-size: 2.5rem; - margin-bottom: 4rem; - color: #ffffff; -} - -.case-study-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2.5rem; -} - -.case-study { - background: #1a1a1a; - border-left: 4px solid #00d4ff; - padding: 2.5rem; + border: 1px solid #00ffff; border-radius: 8px; + box-shadow: 0 0 15px rgba(0, 255, 255, 0.3); + height: 100%; } -.case-study .quote { - font-size: 1.2rem; +.testimonial p:first-child { font-style: italic; - color: #ffffff; - margin-bottom: 1.5rem; - line-height: 1.7; -} - -.case-study .author { - color: #00d4ff; - font-weight: 600; + color: #b0b0b0; + margin-bottom: 1rem; } -.cta { - padding: 6rem 2rem; - background: linear-gradient(135deg, #000000 0%, #1a1a1a 100%); - text-align: center; +.testimonial strong { + color: #00ff88; } -.cta-content { - max-width: 700px; - margin: 0 auto; +/* Signup Section - Sentinel Branding */ +.signup-section { + background: #0a0a0a; + padding: 4rem 2rem; } -.cta h2 { - font-size: 2.5rem; - margin-bottom: 1.5rem; - color: #ffffff; +.signup-section h2 { + color: #00ffff; + text-shadow: 0 0 20px rgba(0, 255, 255, 0.8); } -.cta p { - font-size: 1.2rem; +.signup-section p { color: #b0b0b0; - margin-bottom: 3rem; } -.welcome-footer { - padding: 3rem 2rem; - background: #000000; - border-top: 1px solid #333; -} - -.footer-content { - max-width: 1200px; - margin: 0 auto; - text-align: center; -} - -.footer-links { - display: flex; - gap: 2rem; - justify-content: center; - margin-bottom: 1.5rem; - flex-wrap: wrap; -} - -.footer-links a { +.signup-section .form-label { + font-weight: 600; color: #b0b0b0; - text-decoration: none; - transition: color 0.3s; } -.footer-links a:hover { - color: #00d4ff; +.signup-section .form-control, +.signup-section .form-select { + background: #0f0f0f; + border: 1px solid #00ffff; + color: #ffffff; } -.copyright { - color: #666; - font-size: 0.9rem; +.signup-section .form-control:focus, +.signup-section .form-select:focus { + background: #0f0f0f; + border-color: #00ff88; + box-shadow: 0 0 10px rgba(0, 255, 136, 0.4); + color: #ffffff; } +/* Responsive adjustments */ @media (max-width: 768px) { - .hero h1 { - font-size: 2.5rem; - } - - .hero-tagline { - font-size: 1.3rem; + .hero { + padding: 3rem 1rem; } - - .hero-description { - font-size: 1rem; - } - - .hero-cta { - flex-direction: column; - align-items: center; + + .hero .display-4 { + font-size: 2rem; } - - .btn { - width: 100%; - max-width: 300px; + + .hero .lead { + font-size: 1.2rem; } } diff --git a/portal/CloudHealthOffice.Portal/Pages/_Host.cshtml b/portal/CloudHealthOffice.Portal/Pages/_Host.cshtml index 4615c309..bb2bc915 100644 --- a/portal/CloudHealthOffice.Portal/Pages/_Host.cshtml +++ b/portal/CloudHealthOffice.Portal/Pages/_Host.cshtml @@ -10,6 +10,7 @@ + diff --git a/scripts/seed-demo-tenant.json b/scripts/seed-demo-tenant.json index 70a274b2..7ea6fa4e 100644 --- a/scripts/seed-demo-tenant.json +++ b/scripts/seed-demo-tenant.json @@ -13,6 +13,6 @@ "updatedAt": "2026-02-08T00:00:00Z", "adminEmails": [ "demo@cloudhealthoffice.com", - "admin@demohealthplan.com" + "admin@example.com" ] } diff --git a/scripts/validate-edi-x12.ps1 b/scripts/validate-edi-x12.ps1 index 4be867aa..2d663728 100644 --- a/scripts/validate-edi-x12.ps1 +++ b/scripts/validate-edi-x12.ps1 @@ -1,6 +1,6 @@ <# .SYNOPSIS - Validates X12 EDI files for HIPAA 275/277/278/834 format compliance. + Validates X12 EDI files for HIPAA 275/276/277/278/834 format compliance. .DESCRIPTION This script validates X12 EDI file structure and content: @@ -9,7 +9,7 @@ - ST/SE transaction set segments - Trading partner identifiers (Clearinghouse/Health Plan) - Segment structure and delimiters - - Transaction types (275/277/278/834) + - Transaction types (275/276/277/278/834) .PARAMETER Path Path to the EDI file to validate. Can be a single file or directory. @@ -35,8 +35,8 @@ param( [ValidateNotNullOrEmpty()] [string]$Path, - [Parameter(Mandatory=$false, HelpMessage="Expected transaction type (275/277/278/834)")] - [ValidateSet('275', '277', '278', '834', $null)] + [Parameter(Mandatory=$false, HelpMessage="Expected transaction type (275/276/277/278/834)")] + [ValidateSet('275', '276', '277', '278', '834', $null)] [string]$TransactionType = $null, [Parameter(Mandatory=$false, HelpMessage="Enable strict validation mode")] @@ -54,6 +54,7 @@ $PAYER_ID = '{config.payerId}' # Transaction type identifiers $TRANSACTION_TYPES = @{ '275' = 'Attachment Request' + '276' = 'Claim Status Inquiry' '277' = 'Status Response' '278' = 'Health Care Services Review' '834' = 'Benefit Enrollment and Maintenance' @@ -206,7 +207,7 @@ function Test-STSegment { $transactionType = $elements[1] if (-not $TRANSACTION_TYPES.ContainsKey($transactionType)) { - Write-ValidationError "Unknown transaction type '$transactionType' (expected 275, 277, 278, or 834)" $File $Line + Write-ValidationError "Unknown transaction type '$transactionType' (expected 275, 276, 277, 278, or 834)" $File $Line return $null } diff --git a/site/assessment.html b/site/assessment.html index e5090669..b214ed33 100644 --- a/site/assessment.html +++ b/site/assessment.html @@ -482,7 +482,6 @@

Immediate Actions

  1. Schedule Demo

    @@ -526,7 +525,7 @@

    Ready to Transform Your Payer Operations?

    The sequence is immutable. Legacy EDI integration is now optional.

    Platform Overview - Contact Sales + Contact Sales Clone Repository