Listing Thumbnail

    Penguin Ai - Intelligent Medical Coding

     Info
    Sold by: Penguin Ai 
    Deployed on AWS
    Penguin Ai automates CPT, ICD-10, and HCPCS code assignment from clinical documentation using healthcare-trained AI with human-in-the-loop oversight for providers.

    Overview

    Penguin Ai - Intelligent Medical Coding Automation

    Penguin Ai enables healthcare providers to reduce administrative burden, achieve superior coding accuracy, and strengthen compliance by automating medical coding workflows with intelligent AI and human-in-the-loop oversight.

    The platform leverages healthcare-trained models to analyze structured and unstructured clinical documentation, identify diagnoses and procedures, and recommend appropriate CPT, ICD-10, and HCPCS codes. Every output is validated against coding guidelines, payer rules, and medical necessity criteria, with human review for complex cases.

    Designed for enterprise container deployment on AWS, Penguin Ai integrates with Electronic Health Records (EHRs) and practice management systems to enable scalable, secure, and compliant coding operations while improving revenue integrity and reducing denials.

    Core Capabilities

    Code Identification and Validation

    • Extract diagnoses and procedures from clinical documentation and suggest CPT, ICD-10, and HCPCS codes
    • Validate codes against coding guidelines, payer rules, and medical necessity criteria
    • Automate code extraction with AI-driven analysis and rules-based validation

    Explainable AI and Human-in-the-Loop Workflow

    • Provide clear rationale for code recommendations based on clinical evidence
    • Route complex cases to coders using intelligent work queues and prioritization
    • Deliver transparent, auditable outputs while maintaining coder oversight

    Continuous Learning and Optimization

    • Learn from historical coding decisions, claim outcomes, and audit results
    • Continuously update rules and models to reflect evolving coding guidelines
    • Improve performance over time through feedback-driven model refinement

    Workflow Automation and Exception Handling

    • Automate alerts, notifications, and task assignment for coding exceptions
    • Prioritize cases based on revenue impact and audit risk
    • Streamline operations with intelligent routing and task management

    Compliance and Audit Readiness

    • Maintain audit trails and reporting across coding accuracy and productivity
    • Align with ICD-10, CPT, NCCI edits, and payer-specific requirements
    • Ensure regulatory alignment with full transparency and traceability

    Key Benefits

    • Superior coding accuracy and specificity - Healthcare-native AI trained on clinical documentation delivers high-confidence code recommendations
    • Reduce manual coding time and operational costs - Automate high-volume coding while coders focus on complex, high-value cases
    • Minimize claim denials and rework - Validate codes against payer rules and medical necessity criteria before submission
    • Enhance compliance and audit readiness - Full audit trails with transparent rationale tied to coding guidelines
    • Accelerate revenue capture and reimbursement - Faster coding turnaround with fewer errors improves cash flow

    What Makes Penguin Ai Different

    • Healthcare-Native AI - Purpose-built on clinical documentation and coding workflows, not a horizontal tool adapted for healthcare
    • Explainable and Audit-Ready - Every recommendation includes transparent rationale tied to coding guidelines and payer rules
    • Continuous Learning Loop - Models improve with every claim outcome and audit cycle
    • Automation with Human Oversight - High-confidence automation handles volume while coders focus on complex cases

    AWS Deployment and Integration

    Penguin Ai is delivered as a container product on AWS, supporting deployment via Amazon EKS or Amazon ECS. The platform leverages AWS services for scalable, HIPAA-aligned data processing and integrates with EHR systems to support healthcare organizations of all sizes.

    Getting Started

    To schedule a demo or discuss a pilot deployment, contact the Penguin Ai team at support@penguinai.co . The team will guide you through integration planning, EHR connectivity requirements, and deployment configuration tailored to your environment.

    Highlights

    • AI-Powered Code Extraction and Validation - Unlike rule-only engines, Penguin Ai uses healthcare-trained AI to automatically identify and assign CPT, ICD-10, and HCPCS codes from structured and unstructured clinical documentation. Every recommendation is validated against coding guidelines, payer rules, and medical necessity criteria through combined AI-driven analysis and rules-based validation, delivering coding specificity grounded in clinical evidence rather than generic pattern matching.
    • Intelligent Coder Workflows with Human-in-the-Loop Oversight - Rather than replacing coders entirely, Penguin Ai routes complex cases through smart work queues with prioritization and exception handling. High-confidence automation handles volume while coders focus on high-value cases requiring clinical judgment. Every code recommendation includes transparent, auditable rationale to support compliance across ICD-10, CPT, and NCCI edits.
    • Intelligent Coder Workflows with Human-in-the-Loop Oversight - Rather than replacing coders entirely, Penguin Ai routes complex cases through smart work queues with prioritization and exception handling. High-confidence automation handles volume while coders focus on high-value cases requiring clinical judgment. Every code recommendation includes transparent, auditable rationale to support compliance across ICD-10, CPT, and NCCI edits.

    Details

    Delivery method

    Supported services

    Delivery option
    Intelligent Medical Coding Automation

    Latest version

    Operating system
    Linux

    Deployed on AWS
    New

    Introducing multi-product solutions

    You can now purchase comprehensive solutions tailored to use cases and industries.

    Multi-product solutions

    Features and programs

    Financing for AWS Marketplace purchases

    AWS Marketplace now accepts line of credit payments through the PNC Vendor Finance program. This program is available to select AWS customers in the US, excluding NV, NC, ND, TN, & VT.
    Financing for AWS Marketplace purchases

    Pricing

    Penguin Ai - Intelligent Medical Coding

     Info
    Pricing is based on the duration and terms of your contract with the vendor. This entitles you to a specified quantity of use for the contract duration. If you choose not to renew or replace your contract before it ends, access to these entitlements will expire.
    Additional AWS infrastructure costs may apply. Use the AWS Pricing Calculator  to estimate your infrastructure costs.

    12-month contract (2)

     Info
    Dimension
    Cost/12 months
    Monthly Subscription Fee
    $50,000.00
    Transaction Fee
    $5.00

    AI Insights

     Info

    Dimensions summary

    This contract-based listing bills you through two separate charges. You pay a Monthly Subscription Fee for ongoing access to the intelligent medical coding service. On top of that, a Transaction Fee applies based on your usage volume. The subscription covers your base platform access, while the transaction charge scales with how much coding work you process. Together, these dimensions mean your total cost combines a fixed recurring amount with a variable amount tied to activity. Review both dimensions in the pricing table to estimate your total spend.

    Top-of-mind questions for buyers

    The Transaction Fee ties to your coding activity volume. Each chart or encounter processed through the workflow drives transaction charges. This covers documentation review, code suggestion, validation, and CDI query routing. The more encounters your coders run through the service, the higher this variable charge grows on your invoice.
    Both charges appear together on the same invoice. The Monthly Subscription Fee stays fixed each month and covers platform access. The Transaction Fee adds on top and rises or falls with your coding volume. For steady, high-volume operations, the Transaction Fee usually drives most of your total cost.
    The Monthly Subscription Fee stays the same regardless of activity. The Transaction Fee scales with usage, so fewer encounters processed means a lower transaction charge that month. Your baseline subscription cost does not drop when volume falls; only the variable transaction portion moves.
    www.penguinai.co
    Helpful?

    Vendor refund policy

    All fees are non-refundable. Either party may terminate for an uncured material breach (30 days' written notice, including non-payment) or if a party ceases operations. Termination ends platform access and future fees but does not refund pre-paid or unused fees. The sole exception: if Penguin Ai terminates in response to a third-party intellectual property claim, it will refund pre-paid, unused fees for the terminated portion of the term.

    How can we make this page better?

    Tell us how we can improve this page, or report an issue with this product.
    Tell us how we can improve this page, or report an issue with this product.

    Legal

    Vendor terms and conditions

    Upon subscribing to this product, you must acknowledge and agree to the terms and conditions outlined in the vendor's End User License Agreement (EULA) .

    Content disclaimer

    Vendors are responsible for their product descriptions and other product content. AWS does not warrant that vendors' product descriptions or other product content are accurate, complete, reliable, current, or error-free.

    Usage information

     Info

    Delivery details

    Intelligent Medical Coding Automation

    Supported services: Learn more 
    • Amazon ECS
    • Amazon EKS
    Container image

    Containers are lightweight, portable execution environments that wrap server application software in a filesystem that includes everything it needs to run. Container applications run on supported container runtimes and orchestration services, such as Amazon Elastic Container Service (Amazon ECS) or Amazon Elastic Kubernetes Service (Amazon EKS). Both eliminate the need for you to install and operate your own container orchestration software by managing and scheduling containers on a scalable cluster of virtual machines.

    Version release notes
    1. Product overview A HIPAA-aware backend service that automates two home-health workflows: ICD medical coding and OASIS scrubbing. It ingests clinical documents and episode data, performs OCR and PHI-aware extraction, and uses Claude models on Amazon Bedrock to suggest ICD codes and OASIS corrections with supporting evidence.

    Key capabilities: ICD code suggestion with evidence and expert review; coding-session dashboards and review statistics; OASIS episode scrubbing with guideline decisions, accuracy breakdown, and episode lock/submit; clinical-document OCR; enterprise data-warehouse integration for episode data; and an EKS-native batch runner in which the API launches one Kubernetes Job per episode or run date on demand.

    The service runs entirely on AWS services. It exposes a REST API (OpenAPI/Swagger) and runs from a single container image; the same image serves the API and the batch Jobs it launches.

    1. Product at a glance Runtime: FastAPI + Uvicorn (Python 3.11), non-root container (user appuser) Listening port: 8000/tcp (HTTP, behind a TLS-terminating ingress) Route prefixes: /icd-coding/v2, /icd-coding/v2/auth, /oasis-scrubbing API docs: GET /docs, GET /redoc, GET /openapi.json Health endpoint: none is published; use GET /docs (or /openapi.json) as the load balancer health check path. See Section 8. Authentication: JWT bearer token from POST /icd-coding/v2/auth/login State: stateless - all persistent data lives in external, buyer-owned AWS services Volumes: none required Orchestration: Amazon EKS is required for batch episode dispatch. See Section 4. Version: 1.0.0

    2. Prerequisites Provision the following in your own AWS account and supply their coordinates through AWS Secrets Manager (preferred) or environment variables:

    Amazon EKS - required. The API creates Kubernetes Jobs in its own namespace to process episodes, so it must run in a cluster with the RBAC in Section 4. Amazon DocumentDB (MongoDB-compatible, TLS) - users, coding results, OASIS results, and field-encrypted values. The CA certificate ships in the image at /app/global-bundle.pem. Use an instance-based 5.0 cluster so the service can authenticate with IAM through its IRSA role instead of a stored password (Section 5). Amazon Bedrock with Claude model access enabled in the deployment Region - the inference engine for ICD code suggestion and OASIS scrubbing. Model access is requested per Region in the Bedrock console; a Region without it returns AccessDeniedException at runtime. Amazon Textract - OCR for clinical PDFs and images. No endpoint or key is configured; access is granted entirely through the pod's IAM role (Section 9). Amazon S3 - reference resources, source documents, and generated artifacts. The bucket must contain oasis_resources.zip at its root before startup; see the warning in Section 4. AWS Secrets Manager - holds the configuration bundle. Read through the pod's IRSA role. Application Load Balancer / Ingress with a TLS certificate forwarding to port 8000. Optional, depending on the capabilities you enable:

    A data warehouse (for example Amazon Redshift or Snowflake) as the source of home-health episode data, configured from the ACC_SNOWFLAKE_* keys in the configuration bundle. HCHB integration - configured with ACC_HCHB_AGENCY_SECRET. Amazon ElastiCache for Redis - passed through to batch Jobs as REDIS_URL when set. Keep DocumentDB, S3, Bedrock, Textract, and the EKS cluster in the same Region so that inference and OCR calls stay in-Region and no cross-Region data transfer occurs.

    1. Deployment (high level) Subscribe to the product and pull the container image from Amazon ECR (URI and tag shown on the product's Launch page):

    aws ecr get-login-password --region us-east-1 | docker login --username AWS
    --password-stdin 709825985650.dkr.ecr.us-east-1.amazonaws.com docker pull 709825985650.dkr.ecr.us-east-1.amazonaws.com//accentcare-coding:1.0.0 Provision the prerequisites in Section 3. Enable Claude model access in Amazon Bedrock for your deployment Region before the first run.

    Upload the reference-resource bundle. At startup the service downloads oasis_resources.zip from the root of your S3 bucket and unpacks it. If that download fails, the API still starts and ICD coding still works, but the entire /oasis-scrubbing route group is silently omitted - its endpoints return 404 with only a warning in the log. Confirm the object exists before you deploy, and check the startup log line Downloading resources from s3:///oasis_resources.zip.

    Create the configuration bundle in Secrets Manager. The service reads a single JSON secret named accentcare- (for example accentcare-prod when ENV=prod). See Section 5 for its keys.

    Deploy on Amazon EKS:

    Run the API as a Deployment on container port 8000 behind an Ingress with TLS, using GET /docs as the health check path. Do not override the image's command; the default (uvicorn main:app --host 0.0.0.0 --port 8000) starts the API correctly. Bind the pod to a ServiceAccount that has both: Kubernetes RBAC to dispatch Jobs in its own namespace: get on pods, get/list/watch on pods/log, and create/get/list/watch/delete on batch/jobs. A ready-made Role and RoleBinding ship in k8s/oasis-runner.yaml. IRSA for AWS access - Bedrock, Textract, S3, Secrets Manager, and DocumentDB (Section 9). Job pods reuse the same ServiceAccount and therefore inherit the same role. Configure the batch runner. Set OASIS_RUNNER_IMAGE to the same image tag as the API, and OASIS_RUNNER_SERVICE_ACCOUNT to the ServiceAccount above. If OASIS_RUNNER_IMAGE is unset the API tries to read its own pod spec to discover the image, which only works in-cluster; outside a cluster, episode dispatch fails with "Cannot resolve runner image".

    Verify (Section 8): confirm pods are Ready, open https:///docs, obtain a token from POST /icd-coding/v2/auth/login, call a protected endpoint, and confirm a dispatched episode Job completes.

    Scale by adding API replicas and by raising episode Job concurrency.

    Running outside EKS. The API process itself will start under plain Docker or Amazon ECS, which is useful for a smoke test of authentication and the OpenAPI surface:

    docker run -d -p 8000:8000 -e ENV=dev -e AWS_REGION=us-east-2 <IMAGE_URI> Episode dispatch will not work there, because it creates Kubernetes Jobs. Use EKS for any real deployment.

    1. Configuration (high level) Configuration resolves in two steps. The service first reads a JSON bundle from AWS Secrets Manager named accentcare-, and if that lookup fails it falls back to an environment variable of the same name (a warning is logged on every fallback). Only a subset of settings has an environment fallback; the rest are bundle-only.

    Bootstrap variables. Plain environment variables, read before Secrets Manager:

    ENV - selects the bundle name accentcare-. Default dev; set this per environment. AWS_REGION - Region for the Secrets Manager client, and the default Region for Textract and S3. Default us-east-2. Configuration bundle keys, stored in the accentcare- secret. These six are required, and each also accepts an environment variable of the same name as a fallback:

    MONGO_URI - DocumentDB connection string. See "Connecting to DocumentDB with IRSA" below. MONGO_DB - database name. Optional; defaults to accentcare. DB_ENCRYPTION_KEY - Fernet key for field-level encryption. Back this up - see Section 6. AWS_BUCKET_NAME - S3 bucket for resources, documents, and artifacts. AWS_REGION - Region used by the application. Optional; defaults to us-east-2. ROOT_PATH - mount prefix when served behind a proxy sub-path, so /docs resolves. Optional; defaults to empty. The remaining bundle keys have no environment-variable fallback and must be present in the secret:

    CLAUDE_AWS_REGION - required. The Region whose Amazon Bedrock endpoint serves inference. Set it to a Region where you have enabled Claude model access; it may differ from AWS_REGION if you centralize inference capacity, though keeping them equal avoids cross-Region PHI transfer. CLAUDE_MODEL_ID - required. The Bedrock model identifier. Bedrock model IDs carry an anthropic. prefix, for example anthropic.claude-opus-5. To use cross-Region capacity, supply a cross-Region inference profile instead (identifiers are prefixed by geography, such as us.anthropic.claude-opus-5, and may also be given as a full inference-profile ARN). Whatever you set here must be a model you have been granted access to in CLAUDE_AWS_REGION. REDIS_URL - optional. Passed through to batch Jobs when set. ACC_SNOWFLAKE_* - required for warehouse reads. Ten keys: ACC_SNOWFLAKE_AUTH_CLIENT_ID, ACC_SNOWFLAKE_AUTH_CLIENT_SECRET, ACC_SNOWFLAKE_SCOPE_URL, ACC_SNOWFLAKE_TOKEN_URL, ACC_SNOWFLAKE_USER, ACC_SNOWFLAKE_ACCOUNT, ACC_SNOWFLAKE_ROLE, ACC_SNOWFLAKE_DATABASE, ACC_SNOWFLAKE_SCHEMA, ACC_SNOWFLAKE_WAREHOUSE. All ten must be present, or warehouse access raises an error when that feature first runs. ACC_HCHB_AGENCY_SECRET - required for the HCHB integration. Amazon Textract needs no configuration keys. OCR runs in AWS_REGION and is authorized entirely by the pod's IAM role - there is no endpoint, key, or secret to manage.

    Batch runner variables. Plain environment variables on the API pod:

    OASIS_RUNNER_IMAGE - recommended. The image dispatched Jobs run; set it to the same tag as the API. If unset, the API reads its own pod spec to discover the image, which only works in-cluster. OASIS_RUNNER_SERVICE_ACCOUNT - recommended. ServiceAccount assigned to Job pods, so they inherit the same IRSA role. K8S_NAMESPACE - optional, fallback only. In-cluster the namespace is read from the projected ServiceAccount token; this variable is used only when that file is absent, and defaults to default. RUN_DATE - optional. Pins the processing date for batch runs. These variable names are historical: OASIS_* configures the batch Job runner used by both ICD episode dispatch and OASIS scrubbing, and must be set under exactly these names.

    Connecting to DocumentDB with IRSA. Authenticate to Amazon DocumentDB with IAM authentication through the pod's IRSA role, so no database password is stored anywhere. The connection is entirely URI-driven, and the CA certificate is already in the image, so set MONGO_URI to:

    mongodb://:27017/?authMechanism=MONGODB-AWS&authSource=%24external&tls=true&tlsCAFile=/app/global-bundle.pem&retryWrites=false&replicaSet=rs0 Notes on that string:

    authSource=%24external - the $ must be URL-encoded, or the driver rejects the URI. retryWrites=false is required by DocumentDB. Include it in the URI rather than relying on the application, because not every internal call site passes it as a client option. tlsCAFile=/app/global-bundle.pem points at the CA already shipped in the image. Do not mount over that path. No username or password appears in the URI. Credentials are resolved from the pod's IRSA role by the AWS credential chain. Authorization is granted in the database, not in IAM. No IAM policy grants DocumentDB access; the IRSA role is only an identity. Connect once as the DocumentDB primary user and map the role ARN to a database user:

    use $external; db.createUser({ user: "arn:aws:iam::<ACCOUNT_ID>:role/<IRSA_ROLE_NAME>", mechanisms: ["MONGODB-AWS"], roles: [ { role: "readWrite", db: "accentcare" } ] }); Dispatched Job pods reuse the same ServiceAccount and therefore the same role, so this single grant covers the API and every batch Job. It also means MONGO_URI carries no secret when it is passed into Job manifests.

    Constraints to check before choosing this path:

    IAM authentication requires an instance-based DocumentDB 5.0 cluster. It cannot be used for the cluster's primary user, which stays password-based. Each new connection causes the cluster to call STS GetCallerIdentity, so very high connection churn can hit STS throttling. If your cluster cannot meet those constraints, fall back to a password in MONGO_URI, keep that value in the Secrets Manager bundle, and rotate it as described in Section 7.

    Ports: 8000/tcp is the only listening port. Dispatched Job pods expose no ports.

    Volumes: none are required. The container writes no durable data. Transient PDFs and OCR output are written inside the container and removed after use. The DocumentDB CA is already in the image at /app/global-bundle.pem, and the Playwright Chromium build used for PDF rendering is at /opt/playwright; neither should be mounted over.

    1. Data, sensitive information and encryption Where data is stored - the container holds no durable data, and all of it stays inside your own AWS account:

    Users, coding results, OASIS results, and audit records go to Amazon DocumentDB (buyer-owned). Source documents, reference resources, and generated artifacts go to Amazon S3 (buyer-owned). Configuration and credentials go to AWS Secrets Manager (buyer-owned). Clinical text is sent to Amazon Bedrock for inference and to Amazon Textract for OCR. Both are AWS services, both are HIPAA-eligible, and both are covered by your AWS Business Associate Addendum. No PHI leaves AWS. Amazon Bedrock does not retain your prompts or completions, and does not use them to train models.

    Encryption:

    In transit: TLS everywhere. The ingress terminates HTTPS; DocumentDB connections use TLS with the bundled CA; all AWS SDK calls, including Bedrock and Textract, use HTTPS. At rest: enable AWS KMS encryption on DocumentDB, S3, and Secrets Manager when you provision them. Field-level: sensitive values are encrypted with Fernet (DB_ENCRYPTION_KEY) before being written to DocumentDB. DB_ENCRYPTION_KEY is not recoverable. Values encrypted with it cannot be read without it. Back it up securely and treat rotation as a planned migration - see Section 7.

    1. Credentials and rotation Because inference, OCR, storage, and the database all authenticate through the pod's IAM role, there are very few long-lived secrets to manage. Store what remains in Secrets Manager and rotate on your normal cadence (90 days or less):

    DB_ENCRYPTION_KEY - rotating this key requires re-encrypting every existing field-encrypted value in DocumentDB during a planned window. Rotating it without that migration makes the existing data unreadable. DocumentDB credentials - with IAM authentication through IRSA (Section 5) there is no database password to rotate; the driver obtains short-lived credentials from the role on every connection. If you instead embedded a password in MONGO_URI, use managed rotation, then redeploy the API and confirm dispatched Jobs pick up the new value. Warehouse and HCHB credentials - rotate before expiry. Amazon Bedrock and Amazon Textract - no credentials to rotate. Access is authorized by the IAM role, and the credentials behind it are short-lived and rotated automatically. AWS access: use IRSA. Avoid long-lived access keys. global-bundle.pem in the image is a public certificate authority bundle, not a secret.

    Procedure: update the secret, roll the API Deployment, confirm health, then revoke the old value. Note that secret reads are cached in-process, so a rolling restart is required for a new value to take effect.

    1. Backup, recovery and health Backup / recovery:

    Amazon DocumentDB (system of record): enable automated snapshots and point-in-time recovery. To recover, restore to a new cluster and repoint MONGO_URI. Restored data is unreadable without the matching DB_ENCRYPTION_KEY. Amazon S3: enable versioning, and cross-Region replication if you need regional DR. Keep oasis_resources.zip in any replacement bucket. Secrets Manager: secrets are the other half of a working restore; include them in your DR runbook. For regional DR, confirm Claude model access is enabled in Amazon Bedrock in the failover Region as well - model access is granted per Region and does not follow a restored cluster.

    Because the container is stateless, DR is: restore DocumentDB and S3, redeploy the image, repoint the configuration.

    Health monitoring:

    This service publishes no dedicated health endpoint. Use GET /docs or GET /openapi.json as the readiness and load-balancer health check path: both return HTTP 200 once the application is serving and require no authentication. If you set ROOT_PATH, the path moves under that prefix. A 200 from /docs means the process is up. It does not prove DocumentDB, S3, Bedrock, or Textract are reachable; verify those with the functional checks below. In the EKS console or with kubectl get pods, confirm running replicas match desired. Confirm batch Jobs complete: kubectl get jobs -n . Jobs are created with backoffLimit: 0 and ttlSecondsAfterFinished: 300, so a failed Job does not retry and a finished Job is garbage-collected after five minutes. Ship Job logs to CloudWatch if you need to retain them. Send container logs to CloudWatch Logs. Recommended alarms: pod crash-loops and restarts; replicas below desired; failed Jobs; DocumentDB CPU and connection count; Bedrock throttling and invocation errors (the InvocationThrottles and InvocationClientErrors CloudWatch metrics under AWS/Bedrock); Textract throttling; and the startup warning Failed to extract resources - OASIS functionality disabled. Verification steps:

    1. The API is serving (use this as the ALB health check path).

    curl -s -o /dev/null -w '%{http_code}\n' https:///docs # expect 200

    2. The OpenAPI surface is complete. If /oasis-scrubbing paths are absent,

    the S3 resource bundle failed to load (Section 4, step 3).

    curl -s https:///openapi.json | grep -c '/oasis-scrubbing' # expect > 0

    3. Authentication works end to end (proves DocumentDB connectivity).

    curl -s -X POST https:///icd-coding/v2/auth/login
    -H 'Content-Type: application/json'
    -d '{"username":"","password":""}'

    expect {"access_token":"...","token_type":"bearer"}

    4. A protected endpoint accepts the token.

    curl -s https:///icd-coding/v2/sessions
    -H "Authorization: Bearer <ACCESS_TOKEN>" # expect 200

    5. Batch dispatch works (proves RBAC, runner image, and IRSA).

    kubectl get jobs -n

    6. Bedrock model access is granted in the configured Region.

    aws bedrock list-foundation-models --region <CLAUDE_AWS_REGION>
    --query "modelSummaries[?contains(modelId,'anthropic')].modelId" --output text If step 6 returns nothing, or if inference fails at runtime with AccessDeniedException, request Claude model access for that Region in the Amazon Bedrock console.

    1. Service quotas, IAM and pricing Service quotas - request increases proactively via Service Quotas:

    Amazon Bedrock per-model requests-per-minute and tokens-per-minute is the primary scaling constraint for inference. Throttling surfaces as ThrottlingException; raise the quota or adopt a cross-Region inference profile to spread load. Amazon Textract transactions per second bound OCR throughput. Also monitor EKS nodes and pod density, DocumentDB instances and connections, and Secrets Manager API rate limits (secret reads are cached, but every new pod reads them). IAM (least privilege, IRSA). The pod ServiceAccount needs:

    bedrock:InvokeModel and bedrock:InvokeModelWithResponseStream on the Claude model you configured - scope the resource to that model ARN (arn:aws:bedrock:::foundation-model/anthropic.claude-) rather than . If you use a cross-Region inference profile, also allow the action on the inference-profile ARN (arn:aws:bedrock:::inference-profile/) and on the underlying foundation-model ARNs in each Region the profile routes to. textract:DetectDocumentText and textract:AnalyzeDocument for synchronous OCR. Add textract:StartDocumentTextDetection and textract:GetDocumentTextDetection if you enable asynchronous processing of multi-page documents. s3:GetObject, s3:PutObject, and s3:ListBucket on the configured bucket - reference resources, documents, and artifacts. secretsmanager:GetSecretValue on accentcare- - the configuration bundle. kms:Decrypt on the keys protecting those secrets - only if the secrets use a customer-managed key. CloudWatch Logs write permissions - only if pods ship logs directly rather than through a node agent. DocumentDB needs no IAM permission. Even though the service authenticates to it with this same IRSA role, access is granted inside the database by mapping the role ARN to a DocumentDB user (Section 5). Adding IAM permissions will not fix a DocumentDB authorization failure, and rds-db:connect is an Amazon RDS action that does not apply to DocumentDB.

    The node role (or the EKS node group) needs ECR pull permissions.

    Kubernetes RBAC is separate from IAM and is also required - see Section 4, step 5.

    Pricing - software is billed through AWS Marketplace at the listed rate. You separately pay standard AWS rates for the infrastructure you run it on: EKS compute, DocumentDB, S3, Secrets Manager, the load balancer, CloudWatch, Amazon Bedrock per-token inference, and Amazon Textract per-page OCR. Bedrock token spend is typically the largest variable cost, followed by compute and DocumentDB sizing. Because every dependency is an AWS service, the whole deployment can be modeled in the AWS Pricing Calculator.

    1. Security and compliance (PHI) This product processes Protected Health Information. Every service it depends on is an AWS service, so a single AWS Business Associate Addendum covers the whole data path. To operate it in a HIPAA-eligible manner:

    Execute an AWS Business Associate Addendum and use HIPAA-eligible AWS services. Amazon Bedrock, Amazon Textract, Amazon DocumentDB, Amazon S3, Amazon EKS, and AWS Secrets Manager are all HIPAA-eligible. Enable KMS encryption at rest and TLS in transit; run workloads and data stores in private subnets, exposing only the ALB. Use VPC endpoints for Bedrock, Textract, S3, and Secrets Manager so that PHI-bearing traffic never traverses the public internet. Restrict the pod security group so port 8000 is reachable only from the load balancer. Scope IRSA and Kubernetes RBAC to least privilege, and keep the container non-root. Restrict browser origins at the ingress. The application ships with a permissive CORS configuration, so origin filtering should be enforced in front of it. Do not enable debug logging that could capture PHI. Retain DocumentDB audit logs per your policy, and enable Bedrock model invocation logging to CloudWatch or S3 if your compliance program requires an inference audit trail. Note that invocation logs contain prompts and completions, so treat that destination as PHI storage. 11. Upgrades and release notes Upgrades are a rolling image replacement with no destructive migration:

    Review the release notes for the target version and any new or changed configuration. Snapshot DocumentDB and confirm S3 versioning. Pull the new image tag and update the API Deployment and OASIS_RUNNER_IMAGE to the same tag, so dispatched Jobs run the same version as the API. Verify with the checks in Section 8, including one dispatched episode Job. Roll back to the prior tag if needed; rollback is immediate since no destructive migration runs. If a release changes the default CLAUDE_MODEL_ID, confirm you have been granted access to the new model in Amazon Bedrock for your Region before rolling out.

    1. Support This product is provided by Penguin AI. For product support, questions, or issues, contact support@penguinai.co . AWS infrastructure issues are handled through AWS Support. A running instance serves its interactive API reference at /docs and /redoc.

    Additional details

    Usage instructions

    Home Health ICD Coding & OASIS Scrubbing API - Usage Instructions

    HIPAA-aware FastAPI service (Python 3.11) for home-health ICD coding and OASIS scrubbing. Non-root, port 8000/tcp.

    1. PREREQUISITES
    • Amazon EKS (for batch episode dispatch) or ECS (API only - see 5).
    • Amazon DocumentDB 5.0 instance-based (TLS): users, coding and OASIS data.
    • Amazon Bedrock with Claude model access enabled in the deploy Region.
    • Amazon Textract (OCR): no endpoint or key; uses the task/pod role.
    • Amazon S3: documents/artifacts. MUST hold oasis_resources.zip at the root.
    • AWS Secrets Manager; ALB with TLS to port 8000. All in one Region.
    1. PULL IMAGE (authenticate to ECR first; exact URI on the Launch page) docker pull 709825985650.dkr.ecr.us-east-1.amazonaws.com/<ns>/accentcare-coding:1.0.0

    2. IAM ROLE One role serves the API and its Jobs: bedrock:InvokeModel(+WithResponseStream) on the model ARN; textract:DetectDocumentText and AnalyzeDocument; s3:GetObject/PutObject/ListBucket; secretsmanager:GetSecretValue on accentcare-*; kms:Decrypt if those use a CMK. EKS (IRSA): associate an OIDC provider; create the role with a trust policy allowing sts:AssumeRoleWithWebIdentity where the provider's :sub equals system:serviceaccount:<ns>:<sa>; annotate the ServiceAccount eks.amazonaws.com/role-arn=<ROLE_ARN>; set serviceAccountName on the pod spec. One "eksctl create iamserviceaccount" does all four. ECS: pass it as taskRoleArn; the separate executionRoleArn needs ECR pull + secret read.

    3. DEPLOY - AMAZON EKS Upload oasis_resources.zip to the S3 bucket root: unpacked at startup; if it fails the /oasis-scrubbing routes vanish with only a log warning. Create bundle accentcare-<ENV>; enable Bedrock model access or inference 403s. Run the API as a Deployment on port 8000 behind an Ingress with TLS, health check /docs; do not override the image command (uvicorn main:app --host 0.0.0.0 --port 8000). The ServiceAccount also needs RBAC to dispatch Jobs in its namespace: get on pods, get/list/watch on pods/log, create/get/list/watch/delete on batch/jobs (Role + RoleBinding). Job pods reuse it and the role.

    4. DEPLOY - AMAZON ECS (API only) Fargate task definition: networkMode awsvpc, 1 vCPU / 2 GB, containerPort 8000, taskRoleArn from 3, awslogs, no command override. Create a service behind an ALB target group (type ip, port 8000, health path /docs). Batch dispatch needs Kubernetes; use EKS.

    5. CONFIGURATION Config: Secrets Manager bundle accentcare-<ENV>. ENV (default dev) and AWS_REGION (default us-east-2) are plain env vars. Env-var fallback: MONGO_URI, MONGO_DB (default accentcare), DB_ENCRYPTION_KEY, AWS_BUCKET_NAME, AWS_REGION, ROOT_PATH (proxy sub-path). Bundle-only: CLAUDE_AWS_REGION, CLAUDE_MODEL_ID (e.g. anthropic.claude-opus-5 or a cross-Region inference profile ARN), REDIS_URL, warehouse and HCHB keys. Batch runner: OASIS_RUNNER_IMAGE (same tag as the API), OASIS_RUNNER_SERVICE_ACCOUNT, K8S_NAMESPACE, RUN_DATE. DocumentDB uses IAM auth via the same role. MONGO_URI (note %24external): mongodb://<ep>:27017/?authMechanism=MONGODB-AWS&authSource=%24external&tls=true&tlsCAFile=/app/global-bundle.pem&retryWrites=false&replicaSet=rs0 No IAM policy grants DocumentDB: run db.createUser in $external naming the role ARN. DB_ENCRYPTION_KEY (Fernet): back it up - encrypted values are lost without it. PORTS: 8000/tcp only. VOLUMES: none; don't mount over /app/global-bundle.pem or /opt/playwright.

    6. VERIFY curl -o /dev/null -w '%{http_code}\n' https://<host>/docs -> 200. No health endpoint; /docs is the ALB health check. curl -X POST https://<host>/icd-coding/v2/auth/login -H 'Content-Type: application/json'
      -d '{"username":"<u>","password":"<p>"}' -> token, proving DocumentDB auth works. EKS: kubectl get pods/jobs -n <ns> -> pods Ready, Jobs complete.

    7. SECURITY AND SUPPORT One AWS BAA covers the whole path; no PHI leaves AWS. Private subnets; KMS at rest, TLS in transit; least-privilege IAM/RBAC. Support: Penguin AI, support@penguinai.co 

    Support

    Vendor support

    Penguin Ai provides support to help customers successfully deploy and operate the medical coding automation platform.

    Support Channel

    For assistance with implementation, configuration, troubleshooting, or general inquiries, contact the Penguin Ai support team at support@penguinai.co .

    Support Scope

    The support team can assist with:

    • Initial deployment and container configuration on AWS
    • EHR integration setup and connectivity
    • Platform troubleshooting and issue resolution
    • General product questions and feature guidance
    • Refund requests and billing inquiries

    To schedule a product demo or discuss a pilot deployment, reach out to the same support channel and the team will connect you with the appropriate specialist.

    AWS infrastructure support

    AWS Support is a one-on-one, fast-response support channel that is staffed 24x7x365 with experienced and technical support engineers. The service helps customers of all sizes and technical abilities to successfully utilize the products and features provided by Amazon Web Services.

    Similar products

    Customer reviews

    Ratings and reviews

     Info
    0 ratings
    5 star
    4 star
    3 star
    2 star
    1 star
    0%
    0%
    0%
    0%
    0%
    0 reviews
    No customer reviews yet
    Be the first to review this product . We've partnered with PeerSpot to gather customer feedback. You can share your experience by writing or recording a review, or scheduling a call with a PeerSpot analyst.