diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon Comprehend Medical SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-10-30@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-comprehendmedical)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.ComprehendMedical](http://hackage.haskell.org/package/amazonka-comprehendmedical/docs/Amazonka-ComprehendMedical.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-comprehendmedical` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-comprehendmedical.cabal b/amazonka-comprehendmedical.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-comprehendmedical.cabal
@@ -0,0 +1,150 @@
+cabal-version:      2.2
+name:               amazonka-comprehendmedical
+version:            2.0
+synopsis:           Amazon Comprehend Medical SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2018-10-30@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.ComprehendMedical.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.ComprehendMedical" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
+
+source-repository head
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-comprehendmedical
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.ComprehendMedical
+    Amazonka.ComprehendMedical.DescribeEntitiesDetectionV2Job
+    Amazonka.ComprehendMedical.DescribeICD10CMInferenceJob
+    Amazonka.ComprehendMedical.DescribePHIDetectionJob
+    Amazonka.ComprehendMedical.DescribeRxNormInferenceJob
+    Amazonka.ComprehendMedical.DescribeSNOMEDCTInferenceJob
+    Amazonka.ComprehendMedical.DetectEntitiesV2
+    Amazonka.ComprehendMedical.DetectPHI
+    Amazonka.ComprehendMedical.InferICD10CM
+    Amazonka.ComprehendMedical.InferRxNorm
+    Amazonka.ComprehendMedical.InferSNOMEDCT
+    Amazonka.ComprehendMedical.Lens
+    Amazonka.ComprehendMedical.ListEntitiesDetectionV2Jobs
+    Amazonka.ComprehendMedical.ListICD10CMInferenceJobs
+    Amazonka.ComprehendMedical.ListPHIDetectionJobs
+    Amazonka.ComprehendMedical.ListRxNormInferenceJobs
+    Amazonka.ComprehendMedical.ListSNOMEDCTInferenceJobs
+    Amazonka.ComprehendMedical.StartEntitiesDetectionV2Job
+    Amazonka.ComprehendMedical.StartICD10CMInferenceJob
+    Amazonka.ComprehendMedical.StartPHIDetectionJob
+    Amazonka.ComprehendMedical.StartRxNormInferenceJob
+    Amazonka.ComprehendMedical.StartSNOMEDCTInferenceJob
+    Amazonka.ComprehendMedical.StopEntitiesDetectionV2Job
+    Amazonka.ComprehendMedical.StopICD10CMInferenceJob
+    Amazonka.ComprehendMedical.StopPHIDetectionJob
+    Amazonka.ComprehendMedical.StopRxNormInferenceJob
+    Amazonka.ComprehendMedical.StopSNOMEDCTInferenceJob
+    Amazonka.ComprehendMedical.Types
+    Amazonka.ComprehendMedical.Types.Attribute
+    Amazonka.ComprehendMedical.Types.AttributeName
+    Amazonka.ComprehendMedical.Types.Characters
+    Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobFilter
+    Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobProperties
+    Amazonka.ComprehendMedical.Types.Entity
+    Amazonka.ComprehendMedical.Types.EntitySubType
+    Amazonka.ComprehendMedical.Types.EntityType
+    Amazonka.ComprehendMedical.Types.ICD10CMAttribute
+    Amazonka.ComprehendMedical.Types.ICD10CMAttributeType
+    Amazonka.ComprehendMedical.Types.ICD10CMConcept
+    Amazonka.ComprehendMedical.Types.ICD10CMEntity
+    Amazonka.ComprehendMedical.Types.ICD10CMEntityCategory
+    Amazonka.ComprehendMedical.Types.ICD10CMEntityType
+    Amazonka.ComprehendMedical.Types.ICD10CMRelationshipType
+    Amazonka.ComprehendMedical.Types.ICD10CMTrait
+    Amazonka.ComprehendMedical.Types.ICD10CMTraitName
+    Amazonka.ComprehendMedical.Types.InputDataConfig
+    Amazonka.ComprehendMedical.Types.JobStatus
+    Amazonka.ComprehendMedical.Types.LanguageCode
+    Amazonka.ComprehendMedical.Types.OutputDataConfig
+    Amazonka.ComprehendMedical.Types.RelationshipType
+    Amazonka.ComprehendMedical.Types.RxNormAttribute
+    Amazonka.ComprehendMedical.Types.RxNormAttributeType
+    Amazonka.ComprehendMedical.Types.RxNormConcept
+    Amazonka.ComprehendMedical.Types.RxNormEntity
+    Amazonka.ComprehendMedical.Types.RxNormEntityCategory
+    Amazonka.ComprehendMedical.Types.RxNormEntityType
+    Amazonka.ComprehendMedical.Types.RxNormTrait
+    Amazonka.ComprehendMedical.Types.RxNormTraitName
+    Amazonka.ComprehendMedical.Types.SNOMEDCTAttribute
+    Amazonka.ComprehendMedical.Types.SNOMEDCTAttributeType
+    Amazonka.ComprehendMedical.Types.SNOMEDCTConcept
+    Amazonka.ComprehendMedical.Types.SNOMEDCTDetails
+    Amazonka.ComprehendMedical.Types.SNOMEDCTEntity
+    Amazonka.ComprehendMedical.Types.SNOMEDCTEntityCategory
+    Amazonka.ComprehendMedical.Types.SNOMEDCTEntityType
+    Amazonka.ComprehendMedical.Types.SNOMEDCTRelationshipType
+    Amazonka.ComprehendMedical.Types.SNOMEDCTTrait
+    Amazonka.ComprehendMedical.Types.SNOMEDCTTraitName
+    Amazonka.ComprehendMedical.Types.Trait
+    Amazonka.ComprehendMedical.Types.UnmappedAttribute
+    Amazonka.ComprehendMedical.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-comprehendmedical-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.ComprehendMedical
+    Test.Amazonka.ComprehendMedical.Internal
+    Test.Amazonka.Gen.ComprehendMedical
+
+  build-depends:
+    , amazonka-comprehendmedical
+    , amazonka-core               >=2.0 && <2.1
+    , amazonka-test               >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/DescribeEntitiesDetectionV2Job.yaml b/fixture/DescribeEntitiesDetectionV2Job.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEntitiesDetectionV2Job.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeEntitiesDetectionV2JobResponse.proto b/fixture/DescribeEntitiesDetectionV2JobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEntitiesDetectionV2JobResponse.proto
diff --git a/fixture/DescribeICD10CMInferenceJob.yaml b/fixture/DescribeICD10CMInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeICD10CMInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeICD10CMInferenceJobResponse.proto b/fixture/DescribeICD10CMInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeICD10CMInferenceJobResponse.proto
diff --git a/fixture/DescribePHIDetectionJob.yaml b/fixture/DescribePHIDetectionJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePHIDetectionJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePHIDetectionJobResponse.proto b/fixture/DescribePHIDetectionJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePHIDetectionJobResponse.proto
diff --git a/fixture/DescribeRxNormInferenceJob.yaml b/fixture/DescribeRxNormInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRxNormInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeRxNormInferenceJobResponse.proto b/fixture/DescribeRxNormInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRxNormInferenceJobResponse.proto
diff --git a/fixture/DescribeSNOMEDCTInferenceJob.yaml b/fixture/DescribeSNOMEDCTInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSNOMEDCTInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSNOMEDCTInferenceJobResponse.proto b/fixture/DescribeSNOMEDCTInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSNOMEDCTInferenceJobResponse.proto
diff --git a/fixture/DetectEntitiesV2.yaml b/fixture/DetectEntitiesV2.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DetectEntitiesV2.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DetectEntitiesV2Response.proto b/fixture/DetectEntitiesV2Response.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DetectEntitiesV2Response.proto
diff --git a/fixture/DetectPHI.yaml b/fixture/DetectPHI.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DetectPHI.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DetectPHIResponse.proto b/fixture/DetectPHIResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DetectPHIResponse.proto
diff --git a/fixture/InferICD10CM.yaml b/fixture/InferICD10CM.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/InferICD10CM.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/InferICD10CMResponse.proto b/fixture/InferICD10CMResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/InferICD10CMResponse.proto
diff --git a/fixture/InferRxNorm.yaml b/fixture/InferRxNorm.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/InferRxNorm.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/InferRxNormResponse.proto b/fixture/InferRxNormResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/InferRxNormResponse.proto
diff --git a/fixture/InferSNOMEDCT.yaml b/fixture/InferSNOMEDCT.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/InferSNOMEDCT.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/InferSNOMEDCTResponse.proto b/fixture/InferSNOMEDCTResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/InferSNOMEDCTResponse.proto
diff --git a/fixture/ListEntitiesDetectionV2Jobs.yaml b/fixture/ListEntitiesDetectionV2Jobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntitiesDetectionV2Jobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListEntitiesDetectionV2JobsResponse.proto b/fixture/ListEntitiesDetectionV2JobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntitiesDetectionV2JobsResponse.proto
diff --git a/fixture/ListICD10CMInferenceJobs.yaml b/fixture/ListICD10CMInferenceJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListICD10CMInferenceJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListICD10CMInferenceJobsResponse.proto b/fixture/ListICD10CMInferenceJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListICD10CMInferenceJobsResponse.proto
diff --git a/fixture/ListPHIDetectionJobs.yaml b/fixture/ListPHIDetectionJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPHIDetectionJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListPHIDetectionJobsResponse.proto b/fixture/ListPHIDetectionJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPHIDetectionJobsResponse.proto
diff --git a/fixture/ListRxNormInferenceJobs.yaml b/fixture/ListRxNormInferenceJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRxNormInferenceJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListRxNormInferenceJobsResponse.proto b/fixture/ListRxNormInferenceJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRxNormInferenceJobsResponse.proto
diff --git a/fixture/ListSNOMEDCTInferenceJobs.yaml b/fixture/ListSNOMEDCTInferenceJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSNOMEDCTInferenceJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSNOMEDCTInferenceJobsResponse.proto b/fixture/ListSNOMEDCTInferenceJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSNOMEDCTInferenceJobsResponse.proto
diff --git a/fixture/StartEntitiesDetectionV2Job.yaml b/fixture/StartEntitiesDetectionV2Job.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartEntitiesDetectionV2Job.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartEntitiesDetectionV2JobResponse.proto b/fixture/StartEntitiesDetectionV2JobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartEntitiesDetectionV2JobResponse.proto
diff --git a/fixture/StartICD10CMInferenceJob.yaml b/fixture/StartICD10CMInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartICD10CMInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartICD10CMInferenceJobResponse.proto b/fixture/StartICD10CMInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartICD10CMInferenceJobResponse.proto
diff --git a/fixture/StartPHIDetectionJob.yaml b/fixture/StartPHIDetectionJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartPHIDetectionJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartPHIDetectionJobResponse.proto b/fixture/StartPHIDetectionJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartPHIDetectionJobResponse.proto
diff --git a/fixture/StartRxNormInferenceJob.yaml b/fixture/StartRxNormInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartRxNormInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartRxNormInferenceJobResponse.proto b/fixture/StartRxNormInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartRxNormInferenceJobResponse.proto
diff --git a/fixture/StartSNOMEDCTInferenceJob.yaml b/fixture/StartSNOMEDCTInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartSNOMEDCTInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartSNOMEDCTInferenceJobResponse.proto b/fixture/StartSNOMEDCTInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartSNOMEDCTInferenceJobResponse.proto
diff --git a/fixture/StopEntitiesDetectionV2Job.yaml b/fixture/StopEntitiesDetectionV2Job.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopEntitiesDetectionV2Job.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopEntitiesDetectionV2JobResponse.proto b/fixture/StopEntitiesDetectionV2JobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopEntitiesDetectionV2JobResponse.proto
diff --git a/fixture/StopICD10CMInferenceJob.yaml b/fixture/StopICD10CMInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopICD10CMInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopICD10CMInferenceJobResponse.proto b/fixture/StopICD10CMInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopICD10CMInferenceJobResponse.proto
diff --git a/fixture/StopPHIDetectionJob.yaml b/fixture/StopPHIDetectionJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopPHIDetectionJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopPHIDetectionJobResponse.proto b/fixture/StopPHIDetectionJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopPHIDetectionJobResponse.proto
diff --git a/fixture/StopRxNormInferenceJob.yaml b/fixture/StopRxNormInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopRxNormInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopRxNormInferenceJobResponse.proto b/fixture/StopRxNormInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopRxNormInferenceJobResponse.proto
diff --git a/fixture/StopSNOMEDCTInferenceJob.yaml b/fixture/StopSNOMEDCTInferenceJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopSNOMEDCTInferenceJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/comprehendmedical/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  comprehendmedical.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopSNOMEDCTInferenceJobResponse.proto b/fixture/StopSNOMEDCTInferenceJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopSNOMEDCTInferenceJobResponse.proto
diff --git a/gen/Amazonka/ComprehendMedical.hs b/gen/Amazonka/ComprehendMedical.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical.hs
@@ -0,0 +1,409 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ComprehendMedical
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2018-10-30@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Comprehend Medical; extracts structured information from unstructured
+-- clinical text. Use these actions to gain insight in your documents.
+module Amazonka.ComprehendMedical
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** InvalidEncodingException
+    _InvalidEncodingException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** TextSizeLimitExceededException
+    _TextSizeLimitExceededException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DescribeEntitiesDetectionV2Job
+    DescribeEntitiesDetectionV2Job (DescribeEntitiesDetectionV2Job'),
+    newDescribeEntitiesDetectionV2Job,
+    DescribeEntitiesDetectionV2JobResponse (DescribeEntitiesDetectionV2JobResponse'),
+    newDescribeEntitiesDetectionV2JobResponse,
+
+    -- ** DescribeICD10CMInferenceJob
+    DescribeICD10CMInferenceJob (DescribeICD10CMInferenceJob'),
+    newDescribeICD10CMInferenceJob,
+    DescribeICD10CMInferenceJobResponse (DescribeICD10CMInferenceJobResponse'),
+    newDescribeICD10CMInferenceJobResponse,
+
+    -- ** DescribePHIDetectionJob
+    DescribePHIDetectionJob (DescribePHIDetectionJob'),
+    newDescribePHIDetectionJob,
+    DescribePHIDetectionJobResponse (DescribePHIDetectionJobResponse'),
+    newDescribePHIDetectionJobResponse,
+
+    -- ** DescribeRxNormInferenceJob
+    DescribeRxNormInferenceJob (DescribeRxNormInferenceJob'),
+    newDescribeRxNormInferenceJob,
+    DescribeRxNormInferenceJobResponse (DescribeRxNormInferenceJobResponse'),
+    newDescribeRxNormInferenceJobResponse,
+
+    -- ** DescribeSNOMEDCTInferenceJob
+    DescribeSNOMEDCTInferenceJob (DescribeSNOMEDCTInferenceJob'),
+    newDescribeSNOMEDCTInferenceJob,
+    DescribeSNOMEDCTInferenceJobResponse (DescribeSNOMEDCTInferenceJobResponse'),
+    newDescribeSNOMEDCTInferenceJobResponse,
+
+    -- ** DetectEntitiesV2
+    DetectEntitiesV2 (DetectEntitiesV2'),
+    newDetectEntitiesV2,
+    DetectEntitiesV2Response (DetectEntitiesV2Response'),
+    newDetectEntitiesV2Response,
+
+    -- ** DetectPHI
+    DetectPHI (DetectPHI'),
+    newDetectPHI,
+    DetectPHIResponse (DetectPHIResponse'),
+    newDetectPHIResponse,
+
+    -- ** InferICD10CM
+    InferICD10CM (InferICD10CM'),
+    newInferICD10CM,
+    InferICD10CMResponse (InferICD10CMResponse'),
+    newInferICD10CMResponse,
+
+    -- ** InferRxNorm
+    InferRxNorm (InferRxNorm'),
+    newInferRxNorm,
+    InferRxNormResponse (InferRxNormResponse'),
+    newInferRxNormResponse,
+
+    -- ** InferSNOMEDCT
+    InferSNOMEDCT (InferSNOMEDCT'),
+    newInferSNOMEDCT,
+    InferSNOMEDCTResponse (InferSNOMEDCTResponse'),
+    newInferSNOMEDCTResponse,
+
+    -- ** ListEntitiesDetectionV2Jobs
+    ListEntitiesDetectionV2Jobs (ListEntitiesDetectionV2Jobs'),
+    newListEntitiesDetectionV2Jobs,
+    ListEntitiesDetectionV2JobsResponse (ListEntitiesDetectionV2JobsResponse'),
+    newListEntitiesDetectionV2JobsResponse,
+
+    -- ** ListICD10CMInferenceJobs
+    ListICD10CMInferenceJobs (ListICD10CMInferenceJobs'),
+    newListICD10CMInferenceJobs,
+    ListICD10CMInferenceJobsResponse (ListICD10CMInferenceJobsResponse'),
+    newListICD10CMInferenceJobsResponse,
+
+    -- ** ListPHIDetectionJobs
+    ListPHIDetectionJobs (ListPHIDetectionJobs'),
+    newListPHIDetectionJobs,
+    ListPHIDetectionJobsResponse (ListPHIDetectionJobsResponse'),
+    newListPHIDetectionJobsResponse,
+
+    -- ** ListRxNormInferenceJobs
+    ListRxNormInferenceJobs (ListRxNormInferenceJobs'),
+    newListRxNormInferenceJobs,
+    ListRxNormInferenceJobsResponse (ListRxNormInferenceJobsResponse'),
+    newListRxNormInferenceJobsResponse,
+
+    -- ** ListSNOMEDCTInferenceJobs
+    ListSNOMEDCTInferenceJobs (ListSNOMEDCTInferenceJobs'),
+    newListSNOMEDCTInferenceJobs,
+    ListSNOMEDCTInferenceJobsResponse (ListSNOMEDCTInferenceJobsResponse'),
+    newListSNOMEDCTInferenceJobsResponse,
+
+    -- ** StartEntitiesDetectionV2Job
+    StartEntitiesDetectionV2Job (StartEntitiesDetectionV2Job'),
+    newStartEntitiesDetectionV2Job,
+    StartEntitiesDetectionV2JobResponse (StartEntitiesDetectionV2JobResponse'),
+    newStartEntitiesDetectionV2JobResponse,
+
+    -- ** StartICD10CMInferenceJob
+    StartICD10CMInferenceJob (StartICD10CMInferenceJob'),
+    newStartICD10CMInferenceJob,
+    StartICD10CMInferenceJobResponse (StartICD10CMInferenceJobResponse'),
+    newStartICD10CMInferenceJobResponse,
+
+    -- ** StartPHIDetectionJob
+    StartPHIDetectionJob (StartPHIDetectionJob'),
+    newStartPHIDetectionJob,
+    StartPHIDetectionJobResponse (StartPHIDetectionJobResponse'),
+    newStartPHIDetectionJobResponse,
+
+    -- ** StartRxNormInferenceJob
+    StartRxNormInferenceJob (StartRxNormInferenceJob'),
+    newStartRxNormInferenceJob,
+    StartRxNormInferenceJobResponse (StartRxNormInferenceJobResponse'),
+    newStartRxNormInferenceJobResponse,
+
+    -- ** StartSNOMEDCTInferenceJob
+    StartSNOMEDCTInferenceJob (StartSNOMEDCTInferenceJob'),
+    newStartSNOMEDCTInferenceJob,
+    StartSNOMEDCTInferenceJobResponse (StartSNOMEDCTInferenceJobResponse'),
+    newStartSNOMEDCTInferenceJobResponse,
+
+    -- ** StopEntitiesDetectionV2Job
+    StopEntitiesDetectionV2Job (StopEntitiesDetectionV2Job'),
+    newStopEntitiesDetectionV2Job,
+    StopEntitiesDetectionV2JobResponse (StopEntitiesDetectionV2JobResponse'),
+    newStopEntitiesDetectionV2JobResponse,
+
+    -- ** StopICD10CMInferenceJob
+    StopICD10CMInferenceJob (StopICD10CMInferenceJob'),
+    newStopICD10CMInferenceJob,
+    StopICD10CMInferenceJobResponse (StopICD10CMInferenceJobResponse'),
+    newStopICD10CMInferenceJobResponse,
+
+    -- ** StopPHIDetectionJob
+    StopPHIDetectionJob (StopPHIDetectionJob'),
+    newStopPHIDetectionJob,
+    StopPHIDetectionJobResponse (StopPHIDetectionJobResponse'),
+    newStopPHIDetectionJobResponse,
+
+    -- ** StopRxNormInferenceJob
+    StopRxNormInferenceJob (StopRxNormInferenceJob'),
+    newStopRxNormInferenceJob,
+    StopRxNormInferenceJobResponse (StopRxNormInferenceJobResponse'),
+    newStopRxNormInferenceJobResponse,
+
+    -- ** StopSNOMEDCTInferenceJob
+    StopSNOMEDCTInferenceJob (StopSNOMEDCTInferenceJob'),
+    newStopSNOMEDCTInferenceJob,
+    StopSNOMEDCTInferenceJobResponse (StopSNOMEDCTInferenceJobResponse'),
+    newStopSNOMEDCTInferenceJobResponse,
+
+    -- * Types
+
+    -- ** AttributeName
+    AttributeName (..),
+
+    -- ** EntitySubType
+    EntitySubType (..),
+
+    -- ** EntityType
+    EntityType (..),
+
+    -- ** ICD10CMAttributeType
+    ICD10CMAttributeType (..),
+
+    -- ** ICD10CMEntityCategory
+    ICD10CMEntityCategory (..),
+
+    -- ** ICD10CMEntityType
+    ICD10CMEntityType (..),
+
+    -- ** ICD10CMRelationshipType
+    ICD10CMRelationshipType (..),
+
+    -- ** ICD10CMTraitName
+    ICD10CMTraitName (..),
+
+    -- ** JobStatus
+    JobStatus (..),
+
+    -- ** LanguageCode
+    LanguageCode (..),
+
+    -- ** RelationshipType
+    RelationshipType (..),
+
+    -- ** RxNormAttributeType
+    RxNormAttributeType (..),
+
+    -- ** RxNormEntityCategory
+    RxNormEntityCategory (..),
+
+    -- ** RxNormEntityType
+    RxNormEntityType (..),
+
+    -- ** RxNormTraitName
+    RxNormTraitName (..),
+
+    -- ** SNOMEDCTAttributeType
+    SNOMEDCTAttributeType (..),
+
+    -- ** SNOMEDCTEntityCategory
+    SNOMEDCTEntityCategory (..),
+
+    -- ** SNOMEDCTEntityType
+    SNOMEDCTEntityType (..),
+
+    -- ** SNOMEDCTRelationshipType
+    SNOMEDCTRelationshipType (..),
+
+    -- ** SNOMEDCTTraitName
+    SNOMEDCTTraitName (..),
+
+    -- ** Attribute
+    Attribute (Attribute'),
+    newAttribute,
+
+    -- ** Characters
+    Characters (Characters'),
+    newCharacters,
+
+    -- ** ComprehendMedicalAsyncJobFilter
+    ComprehendMedicalAsyncJobFilter (ComprehendMedicalAsyncJobFilter'),
+    newComprehendMedicalAsyncJobFilter,
+
+    -- ** ComprehendMedicalAsyncJobProperties
+    ComprehendMedicalAsyncJobProperties (ComprehendMedicalAsyncJobProperties'),
+    newComprehendMedicalAsyncJobProperties,
+
+    -- ** Entity
+    Entity (Entity'),
+    newEntity,
+
+    -- ** ICD10CMAttribute
+    ICD10CMAttribute (ICD10CMAttribute'),
+    newICD10CMAttribute,
+
+    -- ** ICD10CMConcept
+    ICD10CMConcept (ICD10CMConcept'),
+    newICD10CMConcept,
+
+    -- ** ICD10CMEntity
+    ICD10CMEntity (ICD10CMEntity'),
+    newICD10CMEntity,
+
+    -- ** ICD10CMTrait
+    ICD10CMTrait (ICD10CMTrait'),
+    newICD10CMTrait,
+
+    -- ** InputDataConfig
+    InputDataConfig (InputDataConfig'),
+    newInputDataConfig,
+
+    -- ** OutputDataConfig
+    OutputDataConfig (OutputDataConfig'),
+    newOutputDataConfig,
+
+    -- ** RxNormAttribute
+    RxNormAttribute (RxNormAttribute'),
+    newRxNormAttribute,
+
+    -- ** RxNormConcept
+    RxNormConcept (RxNormConcept'),
+    newRxNormConcept,
+
+    -- ** RxNormEntity
+    RxNormEntity (RxNormEntity'),
+    newRxNormEntity,
+
+    -- ** RxNormTrait
+    RxNormTrait (RxNormTrait'),
+    newRxNormTrait,
+
+    -- ** SNOMEDCTAttribute
+    SNOMEDCTAttribute (SNOMEDCTAttribute'),
+    newSNOMEDCTAttribute,
+
+    -- ** SNOMEDCTConcept
+    SNOMEDCTConcept (SNOMEDCTConcept'),
+    newSNOMEDCTConcept,
+
+    -- ** SNOMEDCTDetails
+    SNOMEDCTDetails (SNOMEDCTDetails'),
+    newSNOMEDCTDetails,
+
+    -- ** SNOMEDCTEntity
+    SNOMEDCTEntity (SNOMEDCTEntity'),
+    newSNOMEDCTEntity,
+
+    -- ** SNOMEDCTTrait
+    SNOMEDCTTrait (SNOMEDCTTrait'),
+    newSNOMEDCTTrait,
+
+    -- ** Trait
+    Trait (Trait'),
+    newTrait,
+
+    -- ** UnmappedAttribute
+    UnmappedAttribute (UnmappedAttribute'),
+    newUnmappedAttribute,
+  )
+where
+
+import Amazonka.ComprehendMedical.DescribeEntitiesDetectionV2Job
+import Amazonka.ComprehendMedical.DescribeICD10CMInferenceJob
+import Amazonka.ComprehendMedical.DescribePHIDetectionJob
+import Amazonka.ComprehendMedical.DescribeRxNormInferenceJob
+import Amazonka.ComprehendMedical.DescribeSNOMEDCTInferenceJob
+import Amazonka.ComprehendMedical.DetectEntitiesV2
+import Amazonka.ComprehendMedical.DetectPHI
+import Amazonka.ComprehendMedical.InferICD10CM
+import Amazonka.ComprehendMedical.InferRxNorm
+import Amazonka.ComprehendMedical.InferSNOMEDCT
+import Amazonka.ComprehendMedical.Lens
+import Amazonka.ComprehendMedical.ListEntitiesDetectionV2Jobs
+import Amazonka.ComprehendMedical.ListICD10CMInferenceJobs
+import Amazonka.ComprehendMedical.ListPHIDetectionJobs
+import Amazonka.ComprehendMedical.ListRxNormInferenceJobs
+import Amazonka.ComprehendMedical.ListSNOMEDCTInferenceJobs
+import Amazonka.ComprehendMedical.StartEntitiesDetectionV2Job
+import Amazonka.ComprehendMedical.StartICD10CMInferenceJob
+import Amazonka.ComprehendMedical.StartPHIDetectionJob
+import Amazonka.ComprehendMedical.StartRxNormInferenceJob
+import Amazonka.ComprehendMedical.StartSNOMEDCTInferenceJob
+import Amazonka.ComprehendMedical.StopEntitiesDetectionV2Job
+import Amazonka.ComprehendMedical.StopICD10CMInferenceJob
+import Amazonka.ComprehendMedical.StopPHIDetectionJob
+import Amazonka.ComprehendMedical.StopRxNormInferenceJob
+import Amazonka.ComprehendMedical.StopSNOMEDCTInferenceJob
+import Amazonka.ComprehendMedical.Types
+import Amazonka.ComprehendMedical.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'ComprehendMedical'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/ComprehendMedical/DescribeEntitiesDetectionV2Job.hs b/gen/Amazonka/ComprehendMedical/DescribeEntitiesDetectionV2Job.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/DescribeEntitiesDetectionV2Job.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.DescribeEntitiesDetectionV2Job
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the properties associated with a medical entities detection job.
+-- Use this operation to get the status of a detection job.
+module Amazonka.ComprehendMedical.DescribeEntitiesDetectionV2Job
+  ( -- * Creating a Request
+    DescribeEntitiesDetectionV2Job (..),
+    newDescribeEntitiesDetectionV2Job,
+
+    -- * Request Lenses
+    describeEntitiesDetectionV2Job_jobId,
+
+    -- * Destructuring the Response
+    DescribeEntitiesDetectionV2JobResponse (..),
+    newDescribeEntitiesDetectionV2JobResponse,
+
+    -- * Response Lenses
+    describeEntitiesDetectionV2JobResponse_comprehendMedicalAsyncJobProperties,
+    describeEntitiesDetectionV2JobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeEntitiesDetectionV2Job' smart constructor.
+data DescribeEntitiesDetectionV2Job = DescribeEntitiesDetectionV2Job'
+  { -- | The identifier that Comprehend Medical; generated for the job. The
+    -- @StartEntitiesDetectionV2Job@ operation returns this identifier in its
+    -- response.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEntitiesDetectionV2Job' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'describeEntitiesDetectionV2Job_jobId' - The identifier that Comprehend Medical; generated for the job. The
+-- @StartEntitiesDetectionV2Job@ operation returns this identifier in its
+-- response.
+newDescribeEntitiesDetectionV2Job ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribeEntitiesDetectionV2Job
+newDescribeEntitiesDetectionV2Job pJobId_ =
+  DescribeEntitiesDetectionV2Job' {jobId = pJobId_}
+
+-- | The identifier that Comprehend Medical; generated for the job. The
+-- @StartEntitiesDetectionV2Job@ operation returns this identifier in its
+-- response.
+describeEntitiesDetectionV2Job_jobId :: Lens.Lens' DescribeEntitiesDetectionV2Job Prelude.Text
+describeEntitiesDetectionV2Job_jobId = Lens.lens (\DescribeEntitiesDetectionV2Job' {jobId} -> jobId) (\s@DescribeEntitiesDetectionV2Job' {} a -> s {jobId = a} :: DescribeEntitiesDetectionV2Job)
+
+instance
+  Core.AWSRequest
+    DescribeEntitiesDetectionV2Job
+  where
+  type
+    AWSResponse DescribeEntitiesDetectionV2Job =
+      DescribeEntitiesDetectionV2JobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeEntitiesDetectionV2JobResponse'
+            Prelude.<$> (x Data..?> "ComprehendMedicalAsyncJobProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeEntitiesDetectionV2Job
+  where
+  hashWithSalt
+    _salt
+    DescribeEntitiesDetectionV2Job' {..} =
+      _salt `Prelude.hashWithSalt` jobId
+
+instance
+  Prelude.NFData
+    DescribeEntitiesDetectionV2Job
+  where
+  rnf DescribeEntitiesDetectionV2Job' {..} =
+    Prelude.rnf jobId
+
+instance
+  Data.ToHeaders
+    DescribeEntitiesDetectionV2Job
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.DescribeEntitiesDetectionV2Job" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeEntitiesDetectionV2Job where
+  toJSON DescribeEntitiesDetectionV2Job' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DescribeEntitiesDetectionV2Job where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeEntitiesDetectionV2Job where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeEntitiesDetectionV2JobResponse' smart constructor.
+data DescribeEntitiesDetectionV2JobResponse = DescribeEntitiesDetectionV2JobResponse'
+  { -- | An object that contains the properties associated with a detection job.
+    comprehendMedicalAsyncJobProperties :: Prelude.Maybe ComprehendMedicalAsyncJobProperties,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEntitiesDetectionV2JobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobProperties', 'describeEntitiesDetectionV2JobResponse_comprehendMedicalAsyncJobProperties' - An object that contains the properties associated with a detection job.
+--
+-- 'httpStatus', 'describeEntitiesDetectionV2JobResponse_httpStatus' - The response's http status code.
+newDescribeEntitiesDetectionV2JobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeEntitiesDetectionV2JobResponse
+newDescribeEntitiesDetectionV2JobResponse
+  pHttpStatus_ =
+    DescribeEntitiesDetectionV2JobResponse'
+      { comprehendMedicalAsyncJobProperties =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | An object that contains the properties associated with a detection job.
+describeEntitiesDetectionV2JobResponse_comprehendMedicalAsyncJobProperties :: Lens.Lens' DescribeEntitiesDetectionV2JobResponse (Prelude.Maybe ComprehendMedicalAsyncJobProperties)
+describeEntitiesDetectionV2JobResponse_comprehendMedicalAsyncJobProperties = Lens.lens (\DescribeEntitiesDetectionV2JobResponse' {comprehendMedicalAsyncJobProperties} -> comprehendMedicalAsyncJobProperties) (\s@DescribeEntitiesDetectionV2JobResponse' {} a -> s {comprehendMedicalAsyncJobProperties = a} :: DescribeEntitiesDetectionV2JobResponse)
+
+-- | The response's http status code.
+describeEntitiesDetectionV2JobResponse_httpStatus :: Lens.Lens' DescribeEntitiesDetectionV2JobResponse Prelude.Int
+describeEntitiesDetectionV2JobResponse_httpStatus = Lens.lens (\DescribeEntitiesDetectionV2JobResponse' {httpStatus} -> httpStatus) (\s@DescribeEntitiesDetectionV2JobResponse' {} a -> s {httpStatus = a} :: DescribeEntitiesDetectionV2JobResponse)
+
+instance
+  Prelude.NFData
+    DescribeEntitiesDetectionV2JobResponse
+  where
+  rnf DescribeEntitiesDetectionV2JobResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobProperties
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/DescribeICD10CMInferenceJob.hs b/gen/Amazonka/ComprehendMedical/DescribeICD10CMInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/DescribeICD10CMInferenceJob.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.DescribeICD10CMInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the properties associated with an InferICD10CM job. Use this
+-- operation to get the status of an inference job.
+module Amazonka.ComprehendMedical.DescribeICD10CMInferenceJob
+  ( -- * Creating a Request
+    DescribeICD10CMInferenceJob (..),
+    newDescribeICD10CMInferenceJob,
+
+    -- * Request Lenses
+    describeICD10CMInferenceJob_jobId,
+
+    -- * Destructuring the Response
+    DescribeICD10CMInferenceJobResponse (..),
+    newDescribeICD10CMInferenceJobResponse,
+
+    -- * Response Lenses
+    describeICD10CMInferenceJobResponse_comprehendMedicalAsyncJobProperties,
+    describeICD10CMInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeICD10CMInferenceJob' smart constructor.
+data DescribeICD10CMInferenceJob = DescribeICD10CMInferenceJob'
+  { -- | The identifier that Amazon Comprehend Medical generated for the job.
+    -- @The StartICD10CMInferenceJob@ operation returns this identifier in its
+    -- response.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeICD10CMInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'describeICD10CMInferenceJob_jobId' - The identifier that Amazon Comprehend Medical generated for the job.
+-- @The StartICD10CMInferenceJob@ operation returns this identifier in its
+-- response.
+newDescribeICD10CMInferenceJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribeICD10CMInferenceJob
+newDescribeICD10CMInferenceJob pJobId_ =
+  DescribeICD10CMInferenceJob' {jobId = pJobId_}
+
+-- | The identifier that Amazon Comprehend Medical generated for the job.
+-- @The StartICD10CMInferenceJob@ operation returns this identifier in its
+-- response.
+describeICD10CMInferenceJob_jobId :: Lens.Lens' DescribeICD10CMInferenceJob Prelude.Text
+describeICD10CMInferenceJob_jobId = Lens.lens (\DescribeICD10CMInferenceJob' {jobId} -> jobId) (\s@DescribeICD10CMInferenceJob' {} a -> s {jobId = a} :: DescribeICD10CMInferenceJob)
+
+instance Core.AWSRequest DescribeICD10CMInferenceJob where
+  type
+    AWSResponse DescribeICD10CMInferenceJob =
+      DescribeICD10CMInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeICD10CMInferenceJobResponse'
+            Prelude.<$> (x Data..?> "ComprehendMedicalAsyncJobProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeICD10CMInferenceJob where
+  hashWithSalt _salt DescribeICD10CMInferenceJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DescribeICD10CMInferenceJob where
+  rnf DescribeICD10CMInferenceJob' {..} =
+    Prelude.rnf jobId
+
+instance Data.ToHeaders DescribeICD10CMInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.DescribeICD10CMInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeICD10CMInferenceJob where
+  toJSON DescribeICD10CMInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DescribeICD10CMInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeICD10CMInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeICD10CMInferenceJobResponse' smart constructor.
+data DescribeICD10CMInferenceJobResponse = DescribeICD10CMInferenceJobResponse'
+  { -- | An object that contains the properties associated with a detection job.
+    comprehendMedicalAsyncJobProperties :: Prelude.Maybe ComprehendMedicalAsyncJobProperties,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeICD10CMInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobProperties', 'describeICD10CMInferenceJobResponse_comprehendMedicalAsyncJobProperties' - An object that contains the properties associated with a detection job.
+--
+-- 'httpStatus', 'describeICD10CMInferenceJobResponse_httpStatus' - The response's http status code.
+newDescribeICD10CMInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeICD10CMInferenceJobResponse
+newDescribeICD10CMInferenceJobResponse pHttpStatus_ =
+  DescribeICD10CMInferenceJobResponse'
+    { comprehendMedicalAsyncJobProperties =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An object that contains the properties associated with a detection job.
+describeICD10CMInferenceJobResponse_comprehendMedicalAsyncJobProperties :: Lens.Lens' DescribeICD10CMInferenceJobResponse (Prelude.Maybe ComprehendMedicalAsyncJobProperties)
+describeICD10CMInferenceJobResponse_comprehendMedicalAsyncJobProperties = Lens.lens (\DescribeICD10CMInferenceJobResponse' {comprehendMedicalAsyncJobProperties} -> comprehendMedicalAsyncJobProperties) (\s@DescribeICD10CMInferenceJobResponse' {} a -> s {comprehendMedicalAsyncJobProperties = a} :: DescribeICD10CMInferenceJobResponse)
+
+-- | The response's http status code.
+describeICD10CMInferenceJobResponse_httpStatus :: Lens.Lens' DescribeICD10CMInferenceJobResponse Prelude.Int
+describeICD10CMInferenceJobResponse_httpStatus = Lens.lens (\DescribeICD10CMInferenceJobResponse' {httpStatus} -> httpStatus) (\s@DescribeICD10CMInferenceJobResponse' {} a -> s {httpStatus = a} :: DescribeICD10CMInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    DescribeICD10CMInferenceJobResponse
+  where
+  rnf DescribeICD10CMInferenceJobResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobProperties
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/DescribePHIDetectionJob.hs b/gen/Amazonka/ComprehendMedical/DescribePHIDetectionJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/DescribePHIDetectionJob.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.DescribePHIDetectionJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the properties associated with a protected health information (PHI)
+-- detection job. Use this operation to get the status of a detection job.
+module Amazonka.ComprehendMedical.DescribePHIDetectionJob
+  ( -- * Creating a Request
+    DescribePHIDetectionJob (..),
+    newDescribePHIDetectionJob,
+
+    -- * Request Lenses
+    describePHIDetectionJob_jobId,
+
+    -- * Destructuring the Response
+    DescribePHIDetectionJobResponse (..),
+    newDescribePHIDetectionJobResponse,
+
+    -- * Response Lenses
+    describePHIDetectionJobResponse_comprehendMedicalAsyncJobProperties,
+    describePHIDetectionJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePHIDetectionJob' smart constructor.
+data DescribePHIDetectionJob = DescribePHIDetectionJob'
+  { -- | The identifier that Comprehend Medical; generated for the job. The
+    -- @StartPHIDetectionJob@ operation returns this identifier in its
+    -- response.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePHIDetectionJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'describePHIDetectionJob_jobId' - The identifier that Comprehend Medical; generated for the job. The
+-- @StartPHIDetectionJob@ operation returns this identifier in its
+-- response.
+newDescribePHIDetectionJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribePHIDetectionJob
+newDescribePHIDetectionJob pJobId_ =
+  DescribePHIDetectionJob' {jobId = pJobId_}
+
+-- | The identifier that Comprehend Medical; generated for the job. The
+-- @StartPHIDetectionJob@ operation returns this identifier in its
+-- response.
+describePHIDetectionJob_jobId :: Lens.Lens' DescribePHIDetectionJob Prelude.Text
+describePHIDetectionJob_jobId = Lens.lens (\DescribePHIDetectionJob' {jobId} -> jobId) (\s@DescribePHIDetectionJob' {} a -> s {jobId = a} :: DescribePHIDetectionJob)
+
+instance Core.AWSRequest DescribePHIDetectionJob where
+  type
+    AWSResponse DescribePHIDetectionJob =
+      DescribePHIDetectionJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePHIDetectionJobResponse'
+            Prelude.<$> (x Data..?> "ComprehendMedicalAsyncJobProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribePHIDetectionJob where
+  hashWithSalt _salt DescribePHIDetectionJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DescribePHIDetectionJob where
+  rnf DescribePHIDetectionJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders DescribePHIDetectionJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.DescribePHIDetectionJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribePHIDetectionJob where
+  toJSON DescribePHIDetectionJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DescribePHIDetectionJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribePHIDetectionJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribePHIDetectionJobResponse' smart constructor.
+data DescribePHIDetectionJobResponse = DescribePHIDetectionJobResponse'
+  { -- | An object that contains the properties associated with a detection job.
+    comprehendMedicalAsyncJobProperties :: Prelude.Maybe ComprehendMedicalAsyncJobProperties,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePHIDetectionJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobProperties', 'describePHIDetectionJobResponse_comprehendMedicalAsyncJobProperties' - An object that contains the properties associated with a detection job.
+--
+-- 'httpStatus', 'describePHIDetectionJobResponse_httpStatus' - The response's http status code.
+newDescribePHIDetectionJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePHIDetectionJobResponse
+newDescribePHIDetectionJobResponse pHttpStatus_ =
+  DescribePHIDetectionJobResponse'
+    { comprehendMedicalAsyncJobProperties =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An object that contains the properties associated with a detection job.
+describePHIDetectionJobResponse_comprehendMedicalAsyncJobProperties :: Lens.Lens' DescribePHIDetectionJobResponse (Prelude.Maybe ComprehendMedicalAsyncJobProperties)
+describePHIDetectionJobResponse_comprehendMedicalAsyncJobProperties = Lens.lens (\DescribePHIDetectionJobResponse' {comprehendMedicalAsyncJobProperties} -> comprehendMedicalAsyncJobProperties) (\s@DescribePHIDetectionJobResponse' {} a -> s {comprehendMedicalAsyncJobProperties = a} :: DescribePHIDetectionJobResponse)
+
+-- | The response's http status code.
+describePHIDetectionJobResponse_httpStatus :: Lens.Lens' DescribePHIDetectionJobResponse Prelude.Int
+describePHIDetectionJobResponse_httpStatus = Lens.lens (\DescribePHIDetectionJobResponse' {httpStatus} -> httpStatus) (\s@DescribePHIDetectionJobResponse' {} a -> s {httpStatus = a} :: DescribePHIDetectionJobResponse)
+
+instance
+  Prelude.NFData
+    DescribePHIDetectionJobResponse
+  where
+  rnf DescribePHIDetectionJobResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobProperties
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/DescribeRxNormInferenceJob.hs b/gen/Amazonka/ComprehendMedical/DescribeRxNormInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/DescribeRxNormInferenceJob.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.DescribeRxNormInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the properties associated with an InferRxNorm job. Use this
+-- operation to get the status of an inference job.
+module Amazonka.ComprehendMedical.DescribeRxNormInferenceJob
+  ( -- * Creating a Request
+    DescribeRxNormInferenceJob (..),
+    newDescribeRxNormInferenceJob,
+
+    -- * Request Lenses
+    describeRxNormInferenceJob_jobId,
+
+    -- * Destructuring the Response
+    DescribeRxNormInferenceJobResponse (..),
+    newDescribeRxNormInferenceJobResponse,
+
+    -- * Response Lenses
+    describeRxNormInferenceJobResponse_comprehendMedicalAsyncJobProperties,
+    describeRxNormInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRxNormInferenceJob' smart constructor.
+data DescribeRxNormInferenceJob = DescribeRxNormInferenceJob'
+  { -- | The identifier that Amazon Comprehend Medical generated for the job. The
+    -- StartRxNormInferenceJob operation returns this identifier in its
+    -- response.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRxNormInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'describeRxNormInferenceJob_jobId' - The identifier that Amazon Comprehend Medical generated for the job. The
+-- StartRxNormInferenceJob operation returns this identifier in its
+-- response.
+newDescribeRxNormInferenceJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribeRxNormInferenceJob
+newDescribeRxNormInferenceJob pJobId_ =
+  DescribeRxNormInferenceJob' {jobId = pJobId_}
+
+-- | The identifier that Amazon Comprehend Medical generated for the job. The
+-- StartRxNormInferenceJob operation returns this identifier in its
+-- response.
+describeRxNormInferenceJob_jobId :: Lens.Lens' DescribeRxNormInferenceJob Prelude.Text
+describeRxNormInferenceJob_jobId = Lens.lens (\DescribeRxNormInferenceJob' {jobId} -> jobId) (\s@DescribeRxNormInferenceJob' {} a -> s {jobId = a} :: DescribeRxNormInferenceJob)
+
+instance Core.AWSRequest DescribeRxNormInferenceJob where
+  type
+    AWSResponse DescribeRxNormInferenceJob =
+      DescribeRxNormInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeRxNormInferenceJobResponse'
+            Prelude.<$> (x Data..?> "ComprehendMedicalAsyncJobProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeRxNormInferenceJob where
+  hashWithSalt _salt DescribeRxNormInferenceJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DescribeRxNormInferenceJob where
+  rnf DescribeRxNormInferenceJob' {..} =
+    Prelude.rnf jobId
+
+instance Data.ToHeaders DescribeRxNormInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.DescribeRxNormInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeRxNormInferenceJob where
+  toJSON DescribeRxNormInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DescribeRxNormInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeRxNormInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeRxNormInferenceJobResponse' smart constructor.
+data DescribeRxNormInferenceJobResponse = DescribeRxNormInferenceJobResponse'
+  { -- | An object that contains the properties associated with a detection job.
+    comprehendMedicalAsyncJobProperties :: Prelude.Maybe ComprehendMedicalAsyncJobProperties,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRxNormInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobProperties', 'describeRxNormInferenceJobResponse_comprehendMedicalAsyncJobProperties' - An object that contains the properties associated with a detection job.
+--
+-- 'httpStatus', 'describeRxNormInferenceJobResponse_httpStatus' - The response's http status code.
+newDescribeRxNormInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeRxNormInferenceJobResponse
+newDescribeRxNormInferenceJobResponse pHttpStatus_ =
+  DescribeRxNormInferenceJobResponse'
+    { comprehendMedicalAsyncJobProperties =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An object that contains the properties associated with a detection job.
+describeRxNormInferenceJobResponse_comprehendMedicalAsyncJobProperties :: Lens.Lens' DescribeRxNormInferenceJobResponse (Prelude.Maybe ComprehendMedicalAsyncJobProperties)
+describeRxNormInferenceJobResponse_comprehendMedicalAsyncJobProperties = Lens.lens (\DescribeRxNormInferenceJobResponse' {comprehendMedicalAsyncJobProperties} -> comprehendMedicalAsyncJobProperties) (\s@DescribeRxNormInferenceJobResponse' {} a -> s {comprehendMedicalAsyncJobProperties = a} :: DescribeRxNormInferenceJobResponse)
+
+-- | The response's http status code.
+describeRxNormInferenceJobResponse_httpStatus :: Lens.Lens' DescribeRxNormInferenceJobResponse Prelude.Int
+describeRxNormInferenceJobResponse_httpStatus = Lens.lens (\DescribeRxNormInferenceJobResponse' {httpStatus} -> httpStatus) (\s@DescribeRxNormInferenceJobResponse' {} a -> s {httpStatus = a} :: DescribeRxNormInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    DescribeRxNormInferenceJobResponse
+  where
+  rnf DescribeRxNormInferenceJobResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobProperties
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/DescribeSNOMEDCTInferenceJob.hs b/gen/Amazonka/ComprehendMedical/DescribeSNOMEDCTInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/DescribeSNOMEDCTInferenceJob.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.DescribeSNOMEDCTInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the properties associated with an InferSNOMEDCT job. Use this
+-- operation to get the status of an inference job.
+module Amazonka.ComprehendMedical.DescribeSNOMEDCTInferenceJob
+  ( -- * Creating a Request
+    DescribeSNOMEDCTInferenceJob (..),
+    newDescribeSNOMEDCTInferenceJob,
+
+    -- * Request Lenses
+    describeSNOMEDCTInferenceJob_jobId,
+
+    -- * Destructuring the Response
+    DescribeSNOMEDCTInferenceJobResponse (..),
+    newDescribeSNOMEDCTInferenceJobResponse,
+
+    -- * Response Lenses
+    describeSNOMEDCTInferenceJobResponse_comprehendMedicalAsyncJobProperties,
+    describeSNOMEDCTInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSNOMEDCTInferenceJob' smart constructor.
+data DescribeSNOMEDCTInferenceJob = DescribeSNOMEDCTInferenceJob'
+  { -- | The identifier that Amazon Comprehend Medical generated for the job. The
+    -- StartSNOMEDCTInferenceJob operation returns this identifier in its
+    -- response.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSNOMEDCTInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'describeSNOMEDCTInferenceJob_jobId' - The identifier that Amazon Comprehend Medical generated for the job. The
+-- StartSNOMEDCTInferenceJob operation returns this identifier in its
+-- response.
+newDescribeSNOMEDCTInferenceJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribeSNOMEDCTInferenceJob
+newDescribeSNOMEDCTInferenceJob pJobId_ =
+  DescribeSNOMEDCTInferenceJob' {jobId = pJobId_}
+
+-- | The identifier that Amazon Comprehend Medical generated for the job. The
+-- StartSNOMEDCTInferenceJob operation returns this identifier in its
+-- response.
+describeSNOMEDCTInferenceJob_jobId :: Lens.Lens' DescribeSNOMEDCTInferenceJob Prelude.Text
+describeSNOMEDCTInferenceJob_jobId = Lens.lens (\DescribeSNOMEDCTInferenceJob' {jobId} -> jobId) (\s@DescribeSNOMEDCTInferenceJob' {} a -> s {jobId = a} :: DescribeSNOMEDCTInferenceJob)
+
+instance Core.AWSRequest DescribeSNOMEDCTInferenceJob where
+  type
+    AWSResponse DescribeSNOMEDCTInferenceJob =
+      DescribeSNOMEDCTInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSNOMEDCTInferenceJobResponse'
+            Prelude.<$> (x Data..?> "ComprehendMedicalAsyncJobProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeSNOMEDCTInferenceJob
+  where
+  hashWithSalt _salt DescribeSNOMEDCTInferenceJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DescribeSNOMEDCTInferenceJob where
+  rnf DescribeSNOMEDCTInferenceJob' {..} =
+    Prelude.rnf jobId
+
+instance Data.ToHeaders DescribeSNOMEDCTInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.DescribeSNOMEDCTInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeSNOMEDCTInferenceJob where
+  toJSON DescribeSNOMEDCTInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DescribeSNOMEDCTInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSNOMEDCTInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSNOMEDCTInferenceJobResponse' smart constructor.
+data DescribeSNOMEDCTInferenceJobResponse = DescribeSNOMEDCTInferenceJobResponse'
+  { comprehendMedicalAsyncJobProperties :: Prelude.Maybe ComprehendMedicalAsyncJobProperties,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSNOMEDCTInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobProperties', 'describeSNOMEDCTInferenceJobResponse_comprehendMedicalAsyncJobProperties' - Undocumented member.
+--
+-- 'httpStatus', 'describeSNOMEDCTInferenceJobResponse_httpStatus' - The response's http status code.
+newDescribeSNOMEDCTInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSNOMEDCTInferenceJobResponse
+newDescribeSNOMEDCTInferenceJobResponse pHttpStatus_ =
+  DescribeSNOMEDCTInferenceJobResponse'
+    { comprehendMedicalAsyncJobProperties =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeSNOMEDCTInferenceJobResponse_comprehendMedicalAsyncJobProperties :: Lens.Lens' DescribeSNOMEDCTInferenceJobResponse (Prelude.Maybe ComprehendMedicalAsyncJobProperties)
+describeSNOMEDCTInferenceJobResponse_comprehendMedicalAsyncJobProperties = Lens.lens (\DescribeSNOMEDCTInferenceJobResponse' {comprehendMedicalAsyncJobProperties} -> comprehendMedicalAsyncJobProperties) (\s@DescribeSNOMEDCTInferenceJobResponse' {} a -> s {comprehendMedicalAsyncJobProperties = a} :: DescribeSNOMEDCTInferenceJobResponse)
+
+-- | The response's http status code.
+describeSNOMEDCTInferenceJobResponse_httpStatus :: Lens.Lens' DescribeSNOMEDCTInferenceJobResponse Prelude.Int
+describeSNOMEDCTInferenceJobResponse_httpStatus = Lens.lens (\DescribeSNOMEDCTInferenceJobResponse' {httpStatus} -> httpStatus) (\s@DescribeSNOMEDCTInferenceJobResponse' {} a -> s {httpStatus = a} :: DescribeSNOMEDCTInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    DescribeSNOMEDCTInferenceJobResponse
+  where
+  rnf DescribeSNOMEDCTInferenceJobResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobProperties
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/DetectEntitiesV2.hs b/gen/Amazonka/ComprehendMedical/DetectEntitiesV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/DetectEntitiesV2.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.DetectEntitiesV2
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inspects the clinical text for a variety of medical entities and returns
+-- specific information about them such as entity category, location, and
+-- confidence score on that information. Amazon Comprehend Medical only
+-- detects medical entities in English language texts.
+--
+-- The @DetectEntitiesV2@ operation replaces the DetectEntities operation.
+-- This new action uses a different model for determining the entities in
+-- your medical text and changes the way that some entities are returned in
+-- the output. You should use the @DetectEntitiesV2@ operation in all new
+-- applications.
+--
+-- The @DetectEntitiesV2@ operation returns the @Acuity@ and @Direction@
+-- entities as attributes instead of types.
+module Amazonka.ComprehendMedical.DetectEntitiesV2
+  ( -- * Creating a Request
+    DetectEntitiesV2 (..),
+    newDetectEntitiesV2,
+
+    -- * Request Lenses
+    detectEntitiesV2_text,
+
+    -- * Destructuring the Response
+    DetectEntitiesV2Response (..),
+    newDetectEntitiesV2Response,
+
+    -- * Response Lenses
+    detectEntitiesV2Response_paginationToken,
+    detectEntitiesV2Response_unmappedAttributes,
+    detectEntitiesV2Response_httpStatus,
+    detectEntitiesV2Response_entities,
+    detectEntitiesV2Response_modelVersion,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDetectEntitiesV2' smart constructor.
+data DetectEntitiesV2 = DetectEntitiesV2'
+  { -- | A UTF-8 string containing the clinical content being examined for
+    -- entities. Each string must contain fewer than 20,000 bytes of
+    -- characters.
+    text :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectEntitiesV2' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'text', 'detectEntitiesV2_text' - A UTF-8 string containing the clinical content being examined for
+-- entities. Each string must contain fewer than 20,000 bytes of
+-- characters.
+newDetectEntitiesV2 ::
+  -- | 'text'
+  Prelude.Text ->
+  DetectEntitiesV2
+newDetectEntitiesV2 pText_ =
+  DetectEntitiesV2' {text = pText_}
+
+-- | A UTF-8 string containing the clinical content being examined for
+-- entities. Each string must contain fewer than 20,000 bytes of
+-- characters.
+detectEntitiesV2_text :: Lens.Lens' DetectEntitiesV2 Prelude.Text
+detectEntitiesV2_text = Lens.lens (\DetectEntitiesV2' {text} -> text) (\s@DetectEntitiesV2' {} a -> s {text = a} :: DetectEntitiesV2)
+
+instance Core.AWSRequest DetectEntitiesV2 where
+  type
+    AWSResponse DetectEntitiesV2 =
+      DetectEntitiesV2Response
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DetectEntitiesV2Response'
+            Prelude.<$> (x Data..?> "PaginationToken")
+            Prelude.<*> ( x
+                            Data..?> "UnmappedAttributes"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entities" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "ModelVersion")
+      )
+
+instance Prelude.Hashable DetectEntitiesV2 where
+  hashWithSalt _salt DetectEntitiesV2' {..} =
+    _salt `Prelude.hashWithSalt` text
+
+instance Prelude.NFData DetectEntitiesV2 where
+  rnf DetectEntitiesV2' {..} = Prelude.rnf text
+
+instance Data.ToHeaders DetectEntitiesV2 where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.DetectEntitiesV2" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DetectEntitiesV2 where
+  toJSON DetectEntitiesV2' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Text" Data..= text)]
+      )
+
+instance Data.ToPath DetectEntitiesV2 where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DetectEntitiesV2 where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDetectEntitiesV2Response' smart constructor.
+data DetectEntitiesV2Response = DetectEntitiesV2Response'
+  { -- | If the result to the @DetectEntitiesV2@ operation was truncated, include
+    -- the @PaginationToken@ to fetch the next page of entities.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | Attributes extracted from the input text that couldn\'t be related to an
+    -- entity.
+    unmappedAttributes :: Prelude.Maybe [UnmappedAttribute],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The collection of medical entities extracted from the input text and
+    -- their associated information. For each entity, the response provides the
+    -- entity text, the entity category, where the entity text begins and ends,
+    -- and the level of confidence in the detection and analysis. Attributes
+    -- and traits of the entity are also returned.
+    entities :: [Entity],
+    -- | The version of the model used to analyze the documents. The version
+    -- number looks like X.X.X. You can use this information to track the model
+    -- used for a particular batch of documents.
+    modelVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectEntitiesV2Response' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'paginationToken', 'detectEntitiesV2Response_paginationToken' - If the result to the @DetectEntitiesV2@ operation was truncated, include
+-- the @PaginationToken@ to fetch the next page of entities.
+--
+-- 'unmappedAttributes', 'detectEntitiesV2Response_unmappedAttributes' - Attributes extracted from the input text that couldn\'t be related to an
+-- entity.
+--
+-- 'httpStatus', 'detectEntitiesV2Response_httpStatus' - The response's http status code.
+--
+-- 'entities', 'detectEntitiesV2Response_entities' - The collection of medical entities extracted from the input text and
+-- their associated information. For each entity, the response provides the
+-- entity text, the entity category, where the entity text begins and ends,
+-- and the level of confidence in the detection and analysis. Attributes
+-- and traits of the entity are also returned.
+--
+-- 'modelVersion', 'detectEntitiesV2Response_modelVersion' - The version of the model used to analyze the documents. The version
+-- number looks like X.X.X. You can use this information to track the model
+-- used for a particular batch of documents.
+newDetectEntitiesV2Response ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'modelVersion'
+  Prelude.Text ->
+  DetectEntitiesV2Response
+newDetectEntitiesV2Response
+  pHttpStatus_
+  pModelVersion_ =
+    DetectEntitiesV2Response'
+      { paginationToken =
+          Prelude.Nothing,
+        unmappedAttributes = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        entities = Prelude.mempty,
+        modelVersion = pModelVersion_
+      }
+
+-- | If the result to the @DetectEntitiesV2@ operation was truncated, include
+-- the @PaginationToken@ to fetch the next page of entities.
+detectEntitiesV2Response_paginationToken :: Lens.Lens' DetectEntitiesV2Response (Prelude.Maybe Prelude.Text)
+detectEntitiesV2Response_paginationToken = Lens.lens (\DetectEntitiesV2Response' {paginationToken} -> paginationToken) (\s@DetectEntitiesV2Response' {} a -> s {paginationToken = a} :: DetectEntitiesV2Response)
+
+-- | Attributes extracted from the input text that couldn\'t be related to an
+-- entity.
+detectEntitiesV2Response_unmappedAttributes :: Lens.Lens' DetectEntitiesV2Response (Prelude.Maybe [UnmappedAttribute])
+detectEntitiesV2Response_unmappedAttributes = Lens.lens (\DetectEntitiesV2Response' {unmappedAttributes} -> unmappedAttributes) (\s@DetectEntitiesV2Response' {} a -> s {unmappedAttributes = a} :: DetectEntitiesV2Response) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+detectEntitiesV2Response_httpStatus :: Lens.Lens' DetectEntitiesV2Response Prelude.Int
+detectEntitiesV2Response_httpStatus = Lens.lens (\DetectEntitiesV2Response' {httpStatus} -> httpStatus) (\s@DetectEntitiesV2Response' {} a -> s {httpStatus = a} :: DetectEntitiesV2Response)
+
+-- | The collection of medical entities extracted from the input text and
+-- their associated information. For each entity, the response provides the
+-- entity text, the entity category, where the entity text begins and ends,
+-- and the level of confidence in the detection and analysis. Attributes
+-- and traits of the entity are also returned.
+detectEntitiesV2Response_entities :: Lens.Lens' DetectEntitiesV2Response [Entity]
+detectEntitiesV2Response_entities = Lens.lens (\DetectEntitiesV2Response' {entities} -> entities) (\s@DetectEntitiesV2Response' {} a -> s {entities = a} :: DetectEntitiesV2Response) Prelude.. Lens.coerced
+
+-- | The version of the model used to analyze the documents. The version
+-- number looks like X.X.X. You can use this information to track the model
+-- used for a particular batch of documents.
+detectEntitiesV2Response_modelVersion :: Lens.Lens' DetectEntitiesV2Response Prelude.Text
+detectEntitiesV2Response_modelVersion = Lens.lens (\DetectEntitiesV2Response' {modelVersion} -> modelVersion) (\s@DetectEntitiesV2Response' {} a -> s {modelVersion = a} :: DetectEntitiesV2Response)
+
+instance Prelude.NFData DetectEntitiesV2Response where
+  rnf DetectEntitiesV2Response' {..} =
+    Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf unmappedAttributes
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
+      `Prelude.seq` Prelude.rnf modelVersion
diff --git a/gen/Amazonka/ComprehendMedical/DetectPHI.hs b/gen/Amazonka/ComprehendMedical/DetectPHI.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/DetectPHI.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.DetectPHI
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inspects the clinical text for protected health information (PHI)
+-- entities and returns the entity category, location, and confidence score
+-- for each entity. Amazon Comprehend Medical only detects entities in
+-- English language texts.
+module Amazonka.ComprehendMedical.DetectPHI
+  ( -- * Creating a Request
+    DetectPHI (..),
+    newDetectPHI,
+
+    -- * Request Lenses
+    detectPHI_text,
+
+    -- * Destructuring the Response
+    DetectPHIResponse (..),
+    newDetectPHIResponse,
+
+    -- * Response Lenses
+    detectPHIResponse_paginationToken,
+    detectPHIResponse_httpStatus,
+    detectPHIResponse_entities,
+    detectPHIResponse_modelVersion,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDetectPHI' smart constructor.
+data DetectPHI = DetectPHI'
+  { -- | A UTF-8 text string containing the clinical content being examined for
+    -- PHI entities. Each string must contain fewer than 20,000 bytes of
+    -- characters.
+    text :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectPHI' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'text', 'detectPHI_text' - A UTF-8 text string containing the clinical content being examined for
+-- PHI entities. Each string must contain fewer than 20,000 bytes of
+-- characters.
+newDetectPHI ::
+  -- | 'text'
+  Prelude.Text ->
+  DetectPHI
+newDetectPHI pText_ = DetectPHI' {text = pText_}
+
+-- | A UTF-8 text string containing the clinical content being examined for
+-- PHI entities. Each string must contain fewer than 20,000 bytes of
+-- characters.
+detectPHI_text :: Lens.Lens' DetectPHI Prelude.Text
+detectPHI_text = Lens.lens (\DetectPHI' {text} -> text) (\s@DetectPHI' {} a -> s {text = a} :: DetectPHI)
+
+instance Core.AWSRequest DetectPHI where
+  type AWSResponse DetectPHI = DetectPHIResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DetectPHIResponse'
+            Prelude.<$> (x Data..?> "PaginationToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entities" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "ModelVersion")
+      )
+
+instance Prelude.Hashable DetectPHI where
+  hashWithSalt _salt DetectPHI' {..} =
+    _salt `Prelude.hashWithSalt` text
+
+instance Prelude.NFData DetectPHI where
+  rnf DetectPHI' {..} = Prelude.rnf text
+
+instance Data.ToHeaders DetectPHI where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.DetectPHI" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DetectPHI where
+  toJSON DetectPHI' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Text" Data..= text)]
+      )
+
+instance Data.ToPath DetectPHI where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DetectPHI where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDetectPHIResponse' smart constructor.
+data DetectPHIResponse = DetectPHIResponse'
+  { -- | If the result of the previous request to @DetectPHI@ was truncated,
+    -- include the @PaginationToken@ to fetch the next page of PHI entities.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The collection of PHI entities extracted from the input text and their
+    -- associated information. For each entity, the response provides the
+    -- entity text, the entity category, where the entity text begins and ends,
+    -- and the level of confidence that Comprehend Medical; has in its
+    -- detection.
+    entities :: [Entity],
+    -- | The version of the model used to analyze the documents. The version
+    -- number looks like X.X.X. You can use this information to track the model
+    -- used for a particular batch of documents.
+    modelVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetectPHIResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'paginationToken', 'detectPHIResponse_paginationToken' - If the result of the previous request to @DetectPHI@ was truncated,
+-- include the @PaginationToken@ to fetch the next page of PHI entities.
+--
+-- 'httpStatus', 'detectPHIResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'detectPHIResponse_entities' - The collection of PHI entities extracted from the input text and their
+-- associated information. For each entity, the response provides the
+-- entity text, the entity category, where the entity text begins and ends,
+-- and the level of confidence that Comprehend Medical; has in its
+-- detection.
+--
+-- 'modelVersion', 'detectPHIResponse_modelVersion' - The version of the model used to analyze the documents. The version
+-- number looks like X.X.X. You can use this information to track the model
+-- used for a particular batch of documents.
+newDetectPHIResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'modelVersion'
+  Prelude.Text ->
+  DetectPHIResponse
+newDetectPHIResponse pHttpStatus_ pModelVersion_ =
+  DetectPHIResponse'
+    { paginationToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty,
+      modelVersion = pModelVersion_
+    }
+
+-- | If the result of the previous request to @DetectPHI@ was truncated,
+-- include the @PaginationToken@ to fetch the next page of PHI entities.
+detectPHIResponse_paginationToken :: Lens.Lens' DetectPHIResponse (Prelude.Maybe Prelude.Text)
+detectPHIResponse_paginationToken = Lens.lens (\DetectPHIResponse' {paginationToken} -> paginationToken) (\s@DetectPHIResponse' {} a -> s {paginationToken = a} :: DetectPHIResponse)
+
+-- | The response's http status code.
+detectPHIResponse_httpStatus :: Lens.Lens' DetectPHIResponse Prelude.Int
+detectPHIResponse_httpStatus = Lens.lens (\DetectPHIResponse' {httpStatus} -> httpStatus) (\s@DetectPHIResponse' {} a -> s {httpStatus = a} :: DetectPHIResponse)
+
+-- | The collection of PHI entities extracted from the input text and their
+-- associated information. For each entity, the response provides the
+-- entity text, the entity category, where the entity text begins and ends,
+-- and the level of confidence that Comprehend Medical; has in its
+-- detection.
+detectPHIResponse_entities :: Lens.Lens' DetectPHIResponse [Entity]
+detectPHIResponse_entities = Lens.lens (\DetectPHIResponse' {entities} -> entities) (\s@DetectPHIResponse' {} a -> s {entities = a} :: DetectPHIResponse) Prelude.. Lens.coerced
+
+-- | The version of the model used to analyze the documents. The version
+-- number looks like X.X.X. You can use this information to track the model
+-- used for a particular batch of documents.
+detectPHIResponse_modelVersion :: Lens.Lens' DetectPHIResponse Prelude.Text
+detectPHIResponse_modelVersion = Lens.lens (\DetectPHIResponse' {modelVersion} -> modelVersion) (\s@DetectPHIResponse' {} a -> s {modelVersion = a} :: DetectPHIResponse)
+
+instance Prelude.NFData DetectPHIResponse where
+  rnf DetectPHIResponse' {..} =
+    Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
+      `Prelude.seq` Prelude.rnf modelVersion
diff --git a/gen/Amazonka/ComprehendMedical/InferICD10CM.hs b/gen/Amazonka/ComprehendMedical/InferICD10CM.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/InferICD10CM.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.InferICD10CM
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- InferICD10CM detects medical conditions as entities listed in a patient
+-- record and links those entities to normalized concept identifiers in the
+-- ICD-10-CM knowledge base from the Centers for Disease Control. Amazon
+-- Comprehend Medical only detects medical entities in English language
+-- texts.
+module Amazonka.ComprehendMedical.InferICD10CM
+  ( -- * Creating a Request
+    InferICD10CM (..),
+    newInferICD10CM,
+
+    -- * Request Lenses
+    inferICD10CM_text,
+
+    -- * Destructuring the Response
+    InferICD10CMResponse (..),
+    newInferICD10CMResponse,
+
+    -- * Response Lenses
+    inferICD10CMResponse_modelVersion,
+    inferICD10CMResponse_paginationToken,
+    inferICD10CMResponse_httpStatus,
+    inferICD10CMResponse_entities,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newInferICD10CM' smart constructor.
+data InferICD10CM = InferICD10CM'
+  { -- | The input text used for analysis. The input for InferICD10CM is a string
+    -- from 1 to 10000 characters.
+    text :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InferICD10CM' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'text', 'inferICD10CM_text' - The input text used for analysis. The input for InferICD10CM is a string
+-- from 1 to 10000 characters.
+newInferICD10CM ::
+  -- | 'text'
+  Prelude.Text ->
+  InferICD10CM
+newInferICD10CM pText_ = InferICD10CM' {text = pText_}
+
+-- | The input text used for analysis. The input for InferICD10CM is a string
+-- from 1 to 10000 characters.
+inferICD10CM_text :: Lens.Lens' InferICD10CM Prelude.Text
+inferICD10CM_text = Lens.lens (\InferICD10CM' {text} -> text) (\s@InferICD10CM' {} a -> s {text = a} :: InferICD10CM)
+
+instance Core.AWSRequest InferICD10CM where
+  type AWSResponse InferICD10CM = InferICD10CMResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          InferICD10CMResponse'
+            Prelude.<$> (x Data..?> "ModelVersion")
+            Prelude.<*> (x Data..?> "PaginationToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable InferICD10CM where
+  hashWithSalt _salt InferICD10CM' {..} =
+    _salt `Prelude.hashWithSalt` text
+
+instance Prelude.NFData InferICD10CM where
+  rnf InferICD10CM' {..} = Prelude.rnf text
+
+instance Data.ToHeaders InferICD10CM where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.InferICD10CM" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON InferICD10CM where
+  toJSON InferICD10CM' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Text" Data..= text)]
+      )
+
+instance Data.ToPath InferICD10CM where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery InferICD10CM where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newInferICD10CMResponse' smart constructor.
+data InferICD10CMResponse = InferICD10CMResponse'
+  { -- | The version of the model used to analyze the documents, in the format
+    -- /n/./n/./n/ You can use this information to track the model used for a
+    -- particular batch of documents.
+    modelVersion :: Prelude.Maybe Prelude.Text,
+    -- | If the result of the previous request to @InferICD10CM@ was truncated,
+    -- include the @PaginationToken@ to fetch the next page of medical
+    -- condition entities.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The medical conditions detected in the text linked to ICD-10-CM
+    -- concepts. If the action is successful, the service sends back an HTTP
+    -- 200 response, as well as the entities detected.
+    entities :: [ICD10CMEntity]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InferICD10CMResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelVersion', 'inferICD10CMResponse_modelVersion' - The version of the model used to analyze the documents, in the format
+-- /n/./n/./n/ You can use this information to track the model used for a
+-- particular batch of documents.
+--
+-- 'paginationToken', 'inferICD10CMResponse_paginationToken' - If the result of the previous request to @InferICD10CM@ was truncated,
+-- include the @PaginationToken@ to fetch the next page of medical
+-- condition entities.
+--
+-- 'httpStatus', 'inferICD10CMResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'inferICD10CMResponse_entities' - The medical conditions detected in the text linked to ICD-10-CM
+-- concepts. If the action is successful, the service sends back an HTTP
+-- 200 response, as well as the entities detected.
+newInferICD10CMResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  InferICD10CMResponse
+newInferICD10CMResponse pHttpStatus_ =
+  InferICD10CMResponse'
+    { modelVersion =
+        Prelude.Nothing,
+      paginationToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The version of the model used to analyze the documents, in the format
+-- /n/./n/./n/ You can use this information to track the model used for a
+-- particular batch of documents.
+inferICD10CMResponse_modelVersion :: Lens.Lens' InferICD10CMResponse (Prelude.Maybe Prelude.Text)
+inferICD10CMResponse_modelVersion = Lens.lens (\InferICD10CMResponse' {modelVersion} -> modelVersion) (\s@InferICD10CMResponse' {} a -> s {modelVersion = a} :: InferICD10CMResponse)
+
+-- | If the result of the previous request to @InferICD10CM@ was truncated,
+-- include the @PaginationToken@ to fetch the next page of medical
+-- condition entities.
+inferICD10CMResponse_paginationToken :: Lens.Lens' InferICD10CMResponse (Prelude.Maybe Prelude.Text)
+inferICD10CMResponse_paginationToken = Lens.lens (\InferICD10CMResponse' {paginationToken} -> paginationToken) (\s@InferICD10CMResponse' {} a -> s {paginationToken = a} :: InferICD10CMResponse)
+
+-- | The response's http status code.
+inferICD10CMResponse_httpStatus :: Lens.Lens' InferICD10CMResponse Prelude.Int
+inferICD10CMResponse_httpStatus = Lens.lens (\InferICD10CMResponse' {httpStatus} -> httpStatus) (\s@InferICD10CMResponse' {} a -> s {httpStatus = a} :: InferICD10CMResponse)
+
+-- | The medical conditions detected in the text linked to ICD-10-CM
+-- concepts. If the action is successful, the service sends back an HTTP
+-- 200 response, as well as the entities detected.
+inferICD10CMResponse_entities :: Lens.Lens' InferICD10CMResponse [ICD10CMEntity]
+inferICD10CMResponse_entities = Lens.lens (\InferICD10CMResponse' {entities} -> entities) (\s@InferICD10CMResponse' {} a -> s {entities = a} :: InferICD10CMResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData InferICD10CMResponse where
+  rnf InferICD10CMResponse' {..} =
+    Prelude.rnf modelVersion
+      `Prelude.seq` Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/ComprehendMedical/InferRxNorm.hs b/gen/Amazonka/ComprehendMedical/InferRxNorm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/InferRxNorm.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.InferRxNorm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- InferRxNorm detects medications as entities listed in a patient record
+-- and links to the normalized concept identifiers in the RxNorm database
+-- from the National Library of Medicine. Amazon Comprehend Medical only
+-- detects medical entities in English language texts.
+module Amazonka.ComprehendMedical.InferRxNorm
+  ( -- * Creating a Request
+    InferRxNorm (..),
+    newInferRxNorm,
+
+    -- * Request Lenses
+    inferRxNorm_text,
+
+    -- * Destructuring the Response
+    InferRxNormResponse (..),
+    newInferRxNormResponse,
+
+    -- * Response Lenses
+    inferRxNormResponse_modelVersion,
+    inferRxNormResponse_paginationToken,
+    inferRxNormResponse_httpStatus,
+    inferRxNormResponse_entities,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newInferRxNorm' smart constructor.
+data InferRxNorm = InferRxNorm'
+  { -- | The input text used for analysis. The input for InferRxNorm is a string
+    -- from 1 to 10000 characters.
+    text :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InferRxNorm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'text', 'inferRxNorm_text' - The input text used for analysis. The input for InferRxNorm is a string
+-- from 1 to 10000 characters.
+newInferRxNorm ::
+  -- | 'text'
+  Prelude.Text ->
+  InferRxNorm
+newInferRxNorm pText_ = InferRxNorm' {text = pText_}
+
+-- | The input text used for analysis. The input for InferRxNorm is a string
+-- from 1 to 10000 characters.
+inferRxNorm_text :: Lens.Lens' InferRxNorm Prelude.Text
+inferRxNorm_text = Lens.lens (\InferRxNorm' {text} -> text) (\s@InferRxNorm' {} a -> s {text = a} :: InferRxNorm)
+
+instance Core.AWSRequest InferRxNorm where
+  type AWSResponse InferRxNorm = InferRxNormResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          InferRxNormResponse'
+            Prelude.<$> (x Data..?> "ModelVersion")
+            Prelude.<*> (x Data..?> "PaginationToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable InferRxNorm where
+  hashWithSalt _salt InferRxNorm' {..} =
+    _salt `Prelude.hashWithSalt` text
+
+instance Prelude.NFData InferRxNorm where
+  rnf InferRxNorm' {..} = Prelude.rnf text
+
+instance Data.ToHeaders InferRxNorm where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.InferRxNorm" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON InferRxNorm where
+  toJSON InferRxNorm' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Text" Data..= text)]
+      )
+
+instance Data.ToPath InferRxNorm where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery InferRxNorm where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newInferRxNormResponse' smart constructor.
+data InferRxNormResponse = InferRxNormResponse'
+  { -- | The version of the model used to analyze the documents, in the format
+    -- /n/./n/./n/ You can use this information to track the model used for a
+    -- particular batch of documents.
+    modelVersion :: Prelude.Maybe Prelude.Text,
+    -- | If the result of the previous request to @InferRxNorm@ was truncated,
+    -- include the @PaginationToken@ to fetch the next page of medication
+    -- entities.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The medication entities detected in the text linked to RxNorm concepts.
+    -- If the action is successful, the service sends back an HTTP 200
+    -- response, as well as the entities detected.
+    entities :: [RxNormEntity]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InferRxNormResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modelVersion', 'inferRxNormResponse_modelVersion' - The version of the model used to analyze the documents, in the format
+-- /n/./n/./n/ You can use this information to track the model used for a
+-- particular batch of documents.
+--
+-- 'paginationToken', 'inferRxNormResponse_paginationToken' - If the result of the previous request to @InferRxNorm@ was truncated,
+-- include the @PaginationToken@ to fetch the next page of medication
+-- entities.
+--
+-- 'httpStatus', 'inferRxNormResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'inferRxNormResponse_entities' - The medication entities detected in the text linked to RxNorm concepts.
+-- If the action is successful, the service sends back an HTTP 200
+-- response, as well as the entities detected.
+newInferRxNormResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  InferRxNormResponse
+newInferRxNormResponse pHttpStatus_ =
+  InferRxNormResponse'
+    { modelVersion =
+        Prelude.Nothing,
+      paginationToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The version of the model used to analyze the documents, in the format
+-- /n/./n/./n/ You can use this information to track the model used for a
+-- particular batch of documents.
+inferRxNormResponse_modelVersion :: Lens.Lens' InferRxNormResponse (Prelude.Maybe Prelude.Text)
+inferRxNormResponse_modelVersion = Lens.lens (\InferRxNormResponse' {modelVersion} -> modelVersion) (\s@InferRxNormResponse' {} a -> s {modelVersion = a} :: InferRxNormResponse)
+
+-- | If the result of the previous request to @InferRxNorm@ was truncated,
+-- include the @PaginationToken@ to fetch the next page of medication
+-- entities.
+inferRxNormResponse_paginationToken :: Lens.Lens' InferRxNormResponse (Prelude.Maybe Prelude.Text)
+inferRxNormResponse_paginationToken = Lens.lens (\InferRxNormResponse' {paginationToken} -> paginationToken) (\s@InferRxNormResponse' {} a -> s {paginationToken = a} :: InferRxNormResponse)
+
+-- | The response's http status code.
+inferRxNormResponse_httpStatus :: Lens.Lens' InferRxNormResponse Prelude.Int
+inferRxNormResponse_httpStatus = Lens.lens (\InferRxNormResponse' {httpStatus} -> httpStatus) (\s@InferRxNormResponse' {} a -> s {httpStatus = a} :: InferRxNormResponse)
+
+-- | The medication entities detected in the text linked to RxNorm concepts.
+-- If the action is successful, the service sends back an HTTP 200
+-- response, as well as the entities detected.
+inferRxNormResponse_entities :: Lens.Lens' InferRxNormResponse [RxNormEntity]
+inferRxNormResponse_entities = Lens.lens (\InferRxNormResponse' {entities} -> entities) (\s@InferRxNormResponse' {} a -> s {entities = a} :: InferRxNormResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData InferRxNormResponse where
+  rnf InferRxNormResponse' {..} =
+    Prelude.rnf modelVersion
+      `Prelude.seq` Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/ComprehendMedical/InferSNOMEDCT.hs b/gen/Amazonka/ComprehendMedical/InferSNOMEDCT.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/InferSNOMEDCT.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.InferSNOMEDCT
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- InferSNOMEDCT detects possible medical concepts as entities and links
+-- them to codes from the Systematized Nomenclature of Medicine, Clinical
+-- Terms (SNOMED-CT) ontology
+module Amazonka.ComprehendMedical.InferSNOMEDCT
+  ( -- * Creating a Request
+    InferSNOMEDCT (..),
+    newInferSNOMEDCT,
+
+    -- * Request Lenses
+    inferSNOMEDCT_text,
+
+    -- * Destructuring the Response
+    InferSNOMEDCTResponse (..),
+    newInferSNOMEDCTResponse,
+
+    -- * Response Lenses
+    inferSNOMEDCTResponse_characters,
+    inferSNOMEDCTResponse_modelVersion,
+    inferSNOMEDCTResponse_paginationToken,
+    inferSNOMEDCTResponse_sNOMEDCTDetails,
+    inferSNOMEDCTResponse_httpStatus,
+    inferSNOMEDCTResponse_entities,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newInferSNOMEDCT' smart constructor.
+data InferSNOMEDCT = InferSNOMEDCT'
+  { -- | The input text to be analyzed using InferSNOMEDCT. The text should be a
+    -- string with 1 to 10000 characters.
+    text :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InferSNOMEDCT' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'text', 'inferSNOMEDCT_text' - The input text to be analyzed using InferSNOMEDCT. The text should be a
+-- string with 1 to 10000 characters.
+newInferSNOMEDCT ::
+  -- | 'text'
+  Prelude.Text ->
+  InferSNOMEDCT
+newInferSNOMEDCT pText_ =
+  InferSNOMEDCT' {text = pText_}
+
+-- | The input text to be analyzed using InferSNOMEDCT. The text should be a
+-- string with 1 to 10000 characters.
+inferSNOMEDCT_text :: Lens.Lens' InferSNOMEDCT Prelude.Text
+inferSNOMEDCT_text = Lens.lens (\InferSNOMEDCT' {text} -> text) (\s@InferSNOMEDCT' {} a -> s {text = a} :: InferSNOMEDCT)
+
+instance Core.AWSRequest InferSNOMEDCT where
+  type
+    AWSResponse InferSNOMEDCT =
+      InferSNOMEDCTResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          InferSNOMEDCTResponse'
+            Prelude.<$> (x Data..?> "Characters")
+            Prelude.<*> (x Data..?> "ModelVersion")
+            Prelude.<*> (x Data..?> "PaginationToken")
+            Prelude.<*> (x Data..?> "SNOMEDCTDetails")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable InferSNOMEDCT where
+  hashWithSalt _salt InferSNOMEDCT' {..} =
+    _salt `Prelude.hashWithSalt` text
+
+instance Prelude.NFData InferSNOMEDCT where
+  rnf InferSNOMEDCT' {..} = Prelude.rnf text
+
+instance Data.ToHeaders InferSNOMEDCT where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.InferSNOMEDCT" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON InferSNOMEDCT where
+  toJSON InferSNOMEDCT' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Text" Data..= text)]
+      )
+
+instance Data.ToPath InferSNOMEDCT where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery InferSNOMEDCT where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newInferSNOMEDCTResponse' smart constructor.
+data InferSNOMEDCTResponse = InferSNOMEDCTResponse'
+  { -- | The number of characters in the input request documentation.
+    characters :: Prelude.Maybe Characters,
+    -- | The version of the model used to analyze the documents, in the format
+    -- n.n.n You can use this information to track the model used for a
+    -- particular batch of documents.
+    modelVersion :: Prelude.Maybe Prelude.Text,
+    -- | If the result of the request is truncated, the pagination token can be
+    -- used to fetch the next page of entities.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | The details of the SNOMED-CT revision, including the edition, language,
+    -- and version date.
+    sNOMEDCTDetails :: Prelude.Maybe SNOMEDCTDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The collection of medical concept entities extracted from the input text
+    -- and their associated information. For each entity, the response provides
+    -- the entity text, the entity category, where the entity text begins and
+    -- ends, and the level of confidence that Comprehend Medical has in the
+    -- detection and analysis. Attributes and traits of the entity are also
+    -- returned.
+    entities :: [SNOMEDCTEntity]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InferSNOMEDCTResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'characters', 'inferSNOMEDCTResponse_characters' - The number of characters in the input request documentation.
+--
+-- 'modelVersion', 'inferSNOMEDCTResponse_modelVersion' - The version of the model used to analyze the documents, in the format
+-- n.n.n You can use this information to track the model used for a
+-- particular batch of documents.
+--
+-- 'paginationToken', 'inferSNOMEDCTResponse_paginationToken' - If the result of the request is truncated, the pagination token can be
+-- used to fetch the next page of entities.
+--
+-- 'sNOMEDCTDetails', 'inferSNOMEDCTResponse_sNOMEDCTDetails' - The details of the SNOMED-CT revision, including the edition, language,
+-- and version date.
+--
+-- 'httpStatus', 'inferSNOMEDCTResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'inferSNOMEDCTResponse_entities' - The collection of medical concept entities extracted from the input text
+-- and their associated information. For each entity, the response provides
+-- the entity text, the entity category, where the entity text begins and
+-- ends, and the level of confidence that Comprehend Medical has in the
+-- detection and analysis. Attributes and traits of the entity are also
+-- returned.
+newInferSNOMEDCTResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  InferSNOMEDCTResponse
+newInferSNOMEDCTResponse pHttpStatus_ =
+  InferSNOMEDCTResponse'
+    { characters =
+        Prelude.Nothing,
+      modelVersion = Prelude.Nothing,
+      paginationToken = Prelude.Nothing,
+      sNOMEDCTDetails = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The number of characters in the input request documentation.
+inferSNOMEDCTResponse_characters :: Lens.Lens' InferSNOMEDCTResponse (Prelude.Maybe Characters)
+inferSNOMEDCTResponse_characters = Lens.lens (\InferSNOMEDCTResponse' {characters} -> characters) (\s@InferSNOMEDCTResponse' {} a -> s {characters = a} :: InferSNOMEDCTResponse)
+
+-- | The version of the model used to analyze the documents, in the format
+-- n.n.n You can use this information to track the model used for a
+-- particular batch of documents.
+inferSNOMEDCTResponse_modelVersion :: Lens.Lens' InferSNOMEDCTResponse (Prelude.Maybe Prelude.Text)
+inferSNOMEDCTResponse_modelVersion = Lens.lens (\InferSNOMEDCTResponse' {modelVersion} -> modelVersion) (\s@InferSNOMEDCTResponse' {} a -> s {modelVersion = a} :: InferSNOMEDCTResponse)
+
+-- | If the result of the request is truncated, the pagination token can be
+-- used to fetch the next page of entities.
+inferSNOMEDCTResponse_paginationToken :: Lens.Lens' InferSNOMEDCTResponse (Prelude.Maybe Prelude.Text)
+inferSNOMEDCTResponse_paginationToken = Lens.lens (\InferSNOMEDCTResponse' {paginationToken} -> paginationToken) (\s@InferSNOMEDCTResponse' {} a -> s {paginationToken = a} :: InferSNOMEDCTResponse)
+
+-- | The details of the SNOMED-CT revision, including the edition, language,
+-- and version date.
+inferSNOMEDCTResponse_sNOMEDCTDetails :: Lens.Lens' InferSNOMEDCTResponse (Prelude.Maybe SNOMEDCTDetails)
+inferSNOMEDCTResponse_sNOMEDCTDetails = Lens.lens (\InferSNOMEDCTResponse' {sNOMEDCTDetails} -> sNOMEDCTDetails) (\s@InferSNOMEDCTResponse' {} a -> s {sNOMEDCTDetails = a} :: InferSNOMEDCTResponse)
+
+-- | The response's http status code.
+inferSNOMEDCTResponse_httpStatus :: Lens.Lens' InferSNOMEDCTResponse Prelude.Int
+inferSNOMEDCTResponse_httpStatus = Lens.lens (\InferSNOMEDCTResponse' {httpStatus} -> httpStatus) (\s@InferSNOMEDCTResponse' {} a -> s {httpStatus = a} :: InferSNOMEDCTResponse)
+
+-- | The collection of medical concept entities extracted from the input text
+-- and their associated information. For each entity, the response provides
+-- the entity text, the entity category, where the entity text begins and
+-- ends, and the level of confidence that Comprehend Medical has in the
+-- detection and analysis. Attributes and traits of the entity are also
+-- returned.
+inferSNOMEDCTResponse_entities :: Lens.Lens' InferSNOMEDCTResponse [SNOMEDCTEntity]
+inferSNOMEDCTResponse_entities = Lens.lens (\InferSNOMEDCTResponse' {entities} -> entities) (\s@InferSNOMEDCTResponse' {} a -> s {entities = a} :: InferSNOMEDCTResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData InferSNOMEDCTResponse where
+  rnf InferSNOMEDCTResponse' {..} =
+    Prelude.rnf characters
+      `Prelude.seq` Prelude.rnf modelVersion
+      `Prelude.seq` Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf sNOMEDCTDetails
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/ComprehendMedical/Lens.hs b/gen/Amazonka/ComprehendMedical/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Lens.hs
@@ -0,0 +1,417 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Lens
+  ( -- * Operations
+
+    -- ** DescribeEntitiesDetectionV2Job
+    describeEntitiesDetectionV2Job_jobId,
+    describeEntitiesDetectionV2JobResponse_comprehendMedicalAsyncJobProperties,
+    describeEntitiesDetectionV2JobResponse_httpStatus,
+
+    -- ** DescribeICD10CMInferenceJob
+    describeICD10CMInferenceJob_jobId,
+    describeICD10CMInferenceJobResponse_comprehendMedicalAsyncJobProperties,
+    describeICD10CMInferenceJobResponse_httpStatus,
+
+    -- ** DescribePHIDetectionJob
+    describePHIDetectionJob_jobId,
+    describePHIDetectionJobResponse_comprehendMedicalAsyncJobProperties,
+    describePHIDetectionJobResponse_httpStatus,
+
+    -- ** DescribeRxNormInferenceJob
+    describeRxNormInferenceJob_jobId,
+    describeRxNormInferenceJobResponse_comprehendMedicalAsyncJobProperties,
+    describeRxNormInferenceJobResponse_httpStatus,
+
+    -- ** DescribeSNOMEDCTInferenceJob
+    describeSNOMEDCTInferenceJob_jobId,
+    describeSNOMEDCTInferenceJobResponse_comprehendMedicalAsyncJobProperties,
+    describeSNOMEDCTInferenceJobResponse_httpStatus,
+
+    -- ** DetectEntitiesV2
+    detectEntitiesV2_text,
+    detectEntitiesV2Response_paginationToken,
+    detectEntitiesV2Response_unmappedAttributes,
+    detectEntitiesV2Response_httpStatus,
+    detectEntitiesV2Response_entities,
+    detectEntitiesV2Response_modelVersion,
+
+    -- ** DetectPHI
+    detectPHI_text,
+    detectPHIResponse_paginationToken,
+    detectPHIResponse_httpStatus,
+    detectPHIResponse_entities,
+    detectPHIResponse_modelVersion,
+
+    -- ** InferICD10CM
+    inferICD10CM_text,
+    inferICD10CMResponse_modelVersion,
+    inferICD10CMResponse_paginationToken,
+    inferICD10CMResponse_httpStatus,
+    inferICD10CMResponse_entities,
+
+    -- ** InferRxNorm
+    inferRxNorm_text,
+    inferRxNormResponse_modelVersion,
+    inferRxNormResponse_paginationToken,
+    inferRxNormResponse_httpStatus,
+    inferRxNormResponse_entities,
+
+    -- ** InferSNOMEDCT
+    inferSNOMEDCT_text,
+    inferSNOMEDCTResponse_characters,
+    inferSNOMEDCTResponse_modelVersion,
+    inferSNOMEDCTResponse_paginationToken,
+    inferSNOMEDCTResponse_sNOMEDCTDetails,
+    inferSNOMEDCTResponse_httpStatus,
+    inferSNOMEDCTResponse_entities,
+
+    -- ** ListEntitiesDetectionV2Jobs
+    listEntitiesDetectionV2Jobs_filter,
+    listEntitiesDetectionV2Jobs_maxResults,
+    listEntitiesDetectionV2Jobs_nextToken,
+    listEntitiesDetectionV2JobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listEntitiesDetectionV2JobsResponse_nextToken,
+    listEntitiesDetectionV2JobsResponse_httpStatus,
+
+    -- ** ListICD10CMInferenceJobs
+    listICD10CMInferenceJobs_filter,
+    listICD10CMInferenceJobs_maxResults,
+    listICD10CMInferenceJobs_nextToken,
+    listICD10CMInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listICD10CMInferenceJobsResponse_nextToken,
+    listICD10CMInferenceJobsResponse_httpStatus,
+
+    -- ** ListPHIDetectionJobs
+    listPHIDetectionJobs_filter,
+    listPHIDetectionJobs_maxResults,
+    listPHIDetectionJobs_nextToken,
+    listPHIDetectionJobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listPHIDetectionJobsResponse_nextToken,
+    listPHIDetectionJobsResponse_httpStatus,
+
+    -- ** ListRxNormInferenceJobs
+    listRxNormInferenceJobs_filter,
+    listRxNormInferenceJobs_maxResults,
+    listRxNormInferenceJobs_nextToken,
+    listRxNormInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listRxNormInferenceJobsResponse_nextToken,
+    listRxNormInferenceJobsResponse_httpStatus,
+
+    -- ** ListSNOMEDCTInferenceJobs
+    listSNOMEDCTInferenceJobs_filter,
+    listSNOMEDCTInferenceJobs_maxResults,
+    listSNOMEDCTInferenceJobs_nextToken,
+    listSNOMEDCTInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listSNOMEDCTInferenceJobsResponse_nextToken,
+    listSNOMEDCTInferenceJobsResponse_httpStatus,
+
+    -- ** StartEntitiesDetectionV2Job
+    startEntitiesDetectionV2Job_clientRequestToken,
+    startEntitiesDetectionV2Job_jobName,
+    startEntitiesDetectionV2Job_kmsKey,
+    startEntitiesDetectionV2Job_inputDataConfig,
+    startEntitiesDetectionV2Job_outputDataConfig,
+    startEntitiesDetectionV2Job_dataAccessRoleArn,
+    startEntitiesDetectionV2Job_languageCode,
+    startEntitiesDetectionV2JobResponse_jobId,
+    startEntitiesDetectionV2JobResponse_httpStatus,
+
+    -- ** StartICD10CMInferenceJob
+    startICD10CMInferenceJob_clientRequestToken,
+    startICD10CMInferenceJob_jobName,
+    startICD10CMInferenceJob_kmsKey,
+    startICD10CMInferenceJob_inputDataConfig,
+    startICD10CMInferenceJob_outputDataConfig,
+    startICD10CMInferenceJob_dataAccessRoleArn,
+    startICD10CMInferenceJob_languageCode,
+    startICD10CMInferenceJobResponse_jobId,
+    startICD10CMInferenceJobResponse_httpStatus,
+
+    -- ** StartPHIDetectionJob
+    startPHIDetectionJob_clientRequestToken,
+    startPHIDetectionJob_jobName,
+    startPHIDetectionJob_kmsKey,
+    startPHIDetectionJob_inputDataConfig,
+    startPHIDetectionJob_outputDataConfig,
+    startPHIDetectionJob_dataAccessRoleArn,
+    startPHIDetectionJob_languageCode,
+    startPHIDetectionJobResponse_jobId,
+    startPHIDetectionJobResponse_httpStatus,
+
+    -- ** StartRxNormInferenceJob
+    startRxNormInferenceJob_clientRequestToken,
+    startRxNormInferenceJob_jobName,
+    startRxNormInferenceJob_kmsKey,
+    startRxNormInferenceJob_inputDataConfig,
+    startRxNormInferenceJob_outputDataConfig,
+    startRxNormInferenceJob_dataAccessRoleArn,
+    startRxNormInferenceJob_languageCode,
+    startRxNormInferenceJobResponse_jobId,
+    startRxNormInferenceJobResponse_httpStatus,
+
+    -- ** StartSNOMEDCTInferenceJob
+    startSNOMEDCTInferenceJob_clientRequestToken,
+    startSNOMEDCTInferenceJob_jobName,
+    startSNOMEDCTInferenceJob_kmsKey,
+    startSNOMEDCTInferenceJob_inputDataConfig,
+    startSNOMEDCTInferenceJob_outputDataConfig,
+    startSNOMEDCTInferenceJob_dataAccessRoleArn,
+    startSNOMEDCTInferenceJob_languageCode,
+    startSNOMEDCTInferenceJobResponse_jobId,
+    startSNOMEDCTInferenceJobResponse_httpStatus,
+
+    -- ** StopEntitiesDetectionV2Job
+    stopEntitiesDetectionV2Job_jobId,
+    stopEntitiesDetectionV2JobResponse_jobId,
+    stopEntitiesDetectionV2JobResponse_httpStatus,
+
+    -- ** StopICD10CMInferenceJob
+    stopICD10CMInferenceJob_jobId,
+    stopICD10CMInferenceJobResponse_jobId,
+    stopICD10CMInferenceJobResponse_httpStatus,
+
+    -- ** StopPHIDetectionJob
+    stopPHIDetectionJob_jobId,
+    stopPHIDetectionJobResponse_jobId,
+    stopPHIDetectionJobResponse_httpStatus,
+
+    -- ** StopRxNormInferenceJob
+    stopRxNormInferenceJob_jobId,
+    stopRxNormInferenceJobResponse_jobId,
+    stopRxNormInferenceJobResponse_httpStatus,
+
+    -- ** StopSNOMEDCTInferenceJob
+    stopSNOMEDCTInferenceJob_jobId,
+    stopSNOMEDCTInferenceJobResponse_jobId,
+    stopSNOMEDCTInferenceJobResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Attribute
+    attribute_beginOffset,
+    attribute_category,
+    attribute_endOffset,
+    attribute_id,
+    attribute_relationshipScore,
+    attribute_relationshipType,
+    attribute_score,
+    attribute_text,
+    attribute_traits,
+    attribute_type,
+
+    -- ** Characters
+    characters_originalTextCharacters,
+
+    -- ** ComprehendMedicalAsyncJobFilter
+    comprehendMedicalAsyncJobFilter_jobName,
+    comprehendMedicalAsyncJobFilter_jobStatus,
+    comprehendMedicalAsyncJobFilter_submitTimeAfter,
+    comprehendMedicalAsyncJobFilter_submitTimeBefore,
+
+    -- ** ComprehendMedicalAsyncJobProperties
+    comprehendMedicalAsyncJobProperties_dataAccessRoleArn,
+    comprehendMedicalAsyncJobProperties_endTime,
+    comprehendMedicalAsyncJobProperties_expirationTime,
+    comprehendMedicalAsyncJobProperties_inputDataConfig,
+    comprehendMedicalAsyncJobProperties_jobId,
+    comprehendMedicalAsyncJobProperties_jobName,
+    comprehendMedicalAsyncJobProperties_jobStatus,
+    comprehendMedicalAsyncJobProperties_kmsKey,
+    comprehendMedicalAsyncJobProperties_languageCode,
+    comprehendMedicalAsyncJobProperties_manifestFilePath,
+    comprehendMedicalAsyncJobProperties_message,
+    comprehendMedicalAsyncJobProperties_modelVersion,
+    comprehendMedicalAsyncJobProperties_outputDataConfig,
+    comprehendMedicalAsyncJobProperties_submitTime,
+
+    -- ** Entity
+    entity_attributes,
+    entity_beginOffset,
+    entity_category,
+    entity_endOffset,
+    entity_id,
+    entity_score,
+    entity_text,
+    entity_traits,
+    entity_type,
+
+    -- ** ICD10CMAttribute
+    iCD10CMAttribute_beginOffset,
+    iCD10CMAttribute_category,
+    iCD10CMAttribute_endOffset,
+    iCD10CMAttribute_id,
+    iCD10CMAttribute_relationshipScore,
+    iCD10CMAttribute_relationshipType,
+    iCD10CMAttribute_score,
+    iCD10CMAttribute_text,
+    iCD10CMAttribute_traits,
+    iCD10CMAttribute_type,
+
+    -- ** ICD10CMConcept
+    iCD10CMConcept_code,
+    iCD10CMConcept_description,
+    iCD10CMConcept_score,
+
+    -- ** ICD10CMEntity
+    iCD10CMEntity_attributes,
+    iCD10CMEntity_beginOffset,
+    iCD10CMEntity_category,
+    iCD10CMEntity_endOffset,
+    iCD10CMEntity_iCD10CMConcepts,
+    iCD10CMEntity_id,
+    iCD10CMEntity_score,
+    iCD10CMEntity_text,
+    iCD10CMEntity_traits,
+    iCD10CMEntity_type,
+
+    -- ** ICD10CMTrait
+    iCD10CMTrait_name,
+    iCD10CMTrait_score,
+
+    -- ** InputDataConfig
+    inputDataConfig_s3Key,
+    inputDataConfig_s3Bucket,
+
+    -- ** OutputDataConfig
+    outputDataConfig_s3Key,
+    outputDataConfig_s3Bucket,
+
+    -- ** RxNormAttribute
+    rxNormAttribute_beginOffset,
+    rxNormAttribute_endOffset,
+    rxNormAttribute_id,
+    rxNormAttribute_relationshipScore,
+    rxNormAttribute_score,
+    rxNormAttribute_text,
+    rxNormAttribute_traits,
+    rxNormAttribute_type,
+
+    -- ** RxNormConcept
+    rxNormConcept_code,
+    rxNormConcept_description,
+    rxNormConcept_score,
+
+    -- ** RxNormEntity
+    rxNormEntity_attributes,
+    rxNormEntity_beginOffset,
+    rxNormEntity_category,
+    rxNormEntity_endOffset,
+    rxNormEntity_id,
+    rxNormEntity_rxNormConcepts,
+    rxNormEntity_score,
+    rxNormEntity_text,
+    rxNormEntity_traits,
+    rxNormEntity_type,
+
+    -- ** RxNormTrait
+    rxNormTrait_name,
+    rxNormTrait_score,
+
+    -- ** SNOMEDCTAttribute
+    sNOMEDCTAttribute_beginOffset,
+    sNOMEDCTAttribute_category,
+    sNOMEDCTAttribute_endOffset,
+    sNOMEDCTAttribute_id,
+    sNOMEDCTAttribute_relationshipScore,
+    sNOMEDCTAttribute_relationshipType,
+    sNOMEDCTAttribute_sNOMEDCTConcepts,
+    sNOMEDCTAttribute_score,
+    sNOMEDCTAttribute_text,
+    sNOMEDCTAttribute_traits,
+    sNOMEDCTAttribute_type,
+
+    -- ** SNOMEDCTConcept
+    sNOMEDCTConcept_code,
+    sNOMEDCTConcept_description,
+    sNOMEDCTConcept_score,
+
+    -- ** SNOMEDCTDetails
+    sNOMEDCTDetails_edition,
+    sNOMEDCTDetails_language,
+    sNOMEDCTDetails_versionDate,
+
+    -- ** SNOMEDCTEntity
+    sNOMEDCTEntity_attributes,
+    sNOMEDCTEntity_beginOffset,
+    sNOMEDCTEntity_category,
+    sNOMEDCTEntity_endOffset,
+    sNOMEDCTEntity_id,
+    sNOMEDCTEntity_sNOMEDCTConcepts,
+    sNOMEDCTEntity_score,
+    sNOMEDCTEntity_text,
+    sNOMEDCTEntity_traits,
+    sNOMEDCTEntity_type,
+
+    -- ** SNOMEDCTTrait
+    sNOMEDCTTrait_name,
+    sNOMEDCTTrait_score,
+
+    -- ** Trait
+    trait_name,
+    trait_score,
+
+    -- ** UnmappedAttribute
+    unmappedAttribute_attribute,
+    unmappedAttribute_type,
+  )
+where
+
+import Amazonka.ComprehendMedical.DescribeEntitiesDetectionV2Job
+import Amazonka.ComprehendMedical.DescribeICD10CMInferenceJob
+import Amazonka.ComprehendMedical.DescribePHIDetectionJob
+import Amazonka.ComprehendMedical.DescribeRxNormInferenceJob
+import Amazonka.ComprehendMedical.DescribeSNOMEDCTInferenceJob
+import Amazonka.ComprehendMedical.DetectEntitiesV2
+import Amazonka.ComprehendMedical.DetectPHI
+import Amazonka.ComprehendMedical.InferICD10CM
+import Amazonka.ComprehendMedical.InferRxNorm
+import Amazonka.ComprehendMedical.InferSNOMEDCT
+import Amazonka.ComprehendMedical.ListEntitiesDetectionV2Jobs
+import Amazonka.ComprehendMedical.ListICD10CMInferenceJobs
+import Amazonka.ComprehendMedical.ListPHIDetectionJobs
+import Amazonka.ComprehendMedical.ListRxNormInferenceJobs
+import Amazonka.ComprehendMedical.ListSNOMEDCTInferenceJobs
+import Amazonka.ComprehendMedical.StartEntitiesDetectionV2Job
+import Amazonka.ComprehendMedical.StartICD10CMInferenceJob
+import Amazonka.ComprehendMedical.StartPHIDetectionJob
+import Amazonka.ComprehendMedical.StartRxNormInferenceJob
+import Amazonka.ComprehendMedical.StartSNOMEDCTInferenceJob
+import Amazonka.ComprehendMedical.StopEntitiesDetectionV2Job
+import Amazonka.ComprehendMedical.StopICD10CMInferenceJob
+import Amazonka.ComprehendMedical.StopPHIDetectionJob
+import Amazonka.ComprehendMedical.StopRxNormInferenceJob
+import Amazonka.ComprehendMedical.StopSNOMEDCTInferenceJob
+import Amazonka.ComprehendMedical.Types.Attribute
+import Amazonka.ComprehendMedical.Types.Characters
+import Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobFilter
+import Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobProperties
+import Amazonka.ComprehendMedical.Types.Entity
+import Amazonka.ComprehendMedical.Types.ICD10CMAttribute
+import Amazonka.ComprehendMedical.Types.ICD10CMConcept
+import Amazonka.ComprehendMedical.Types.ICD10CMEntity
+import Amazonka.ComprehendMedical.Types.ICD10CMTrait
+import Amazonka.ComprehendMedical.Types.InputDataConfig
+import Amazonka.ComprehendMedical.Types.OutputDataConfig
+import Amazonka.ComprehendMedical.Types.RxNormAttribute
+import Amazonka.ComprehendMedical.Types.RxNormConcept
+import Amazonka.ComprehendMedical.Types.RxNormEntity
+import Amazonka.ComprehendMedical.Types.RxNormTrait
+import Amazonka.ComprehendMedical.Types.SNOMEDCTAttribute
+import Amazonka.ComprehendMedical.Types.SNOMEDCTConcept
+import Amazonka.ComprehendMedical.Types.SNOMEDCTDetails
+import Amazonka.ComprehendMedical.Types.SNOMEDCTEntity
+import Amazonka.ComprehendMedical.Types.SNOMEDCTTrait
+import Amazonka.ComprehendMedical.Types.Trait
+import Amazonka.ComprehendMedical.Types.UnmappedAttribute
diff --git a/gen/Amazonka/ComprehendMedical/ListEntitiesDetectionV2Jobs.hs b/gen/Amazonka/ComprehendMedical/ListEntitiesDetectionV2Jobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/ListEntitiesDetectionV2Jobs.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.ListEntitiesDetectionV2Jobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of medical entity detection jobs that you have submitted.
+module Amazonka.ComprehendMedical.ListEntitiesDetectionV2Jobs
+  ( -- * Creating a Request
+    ListEntitiesDetectionV2Jobs (..),
+    newListEntitiesDetectionV2Jobs,
+
+    -- * Request Lenses
+    listEntitiesDetectionV2Jobs_filter,
+    listEntitiesDetectionV2Jobs_maxResults,
+    listEntitiesDetectionV2Jobs_nextToken,
+
+    -- * Destructuring the Response
+    ListEntitiesDetectionV2JobsResponse (..),
+    newListEntitiesDetectionV2JobsResponse,
+
+    -- * Response Lenses
+    listEntitiesDetectionV2JobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listEntitiesDetectionV2JobsResponse_nextToken,
+    listEntitiesDetectionV2JobsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEntitiesDetectionV2Jobs' smart constructor.
+data ListEntitiesDetectionV2Jobs = ListEntitiesDetectionV2Jobs'
+  { -- | Filters the jobs that are returned. You can filter jobs based on their
+    -- names, status, or the date and time that they were submitted. You can
+    -- only set one filter at a time.
+    filter' :: Prelude.Maybe ComprehendMedicalAsyncJobFilter,
+    -- | The maximum number of results to return in each page. The default is
+    -- 100.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEntitiesDetectionV2Jobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'listEntitiesDetectionV2Jobs_filter' - Filters the jobs that are returned. You can filter jobs based on their
+-- names, status, or the date and time that they were submitted. You can
+-- only set one filter at a time.
+--
+-- 'maxResults', 'listEntitiesDetectionV2Jobs_maxResults' - The maximum number of results to return in each page. The default is
+-- 100.
+--
+-- 'nextToken', 'listEntitiesDetectionV2Jobs_nextToken' - Identifies the next page of results to return.
+newListEntitiesDetectionV2Jobs ::
+  ListEntitiesDetectionV2Jobs
+newListEntitiesDetectionV2Jobs =
+  ListEntitiesDetectionV2Jobs'
+    { filter' =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Filters the jobs that are returned. You can filter jobs based on their
+-- names, status, or the date and time that they were submitted. You can
+-- only set one filter at a time.
+listEntitiesDetectionV2Jobs_filter :: Lens.Lens' ListEntitiesDetectionV2Jobs (Prelude.Maybe ComprehendMedicalAsyncJobFilter)
+listEntitiesDetectionV2Jobs_filter = Lens.lens (\ListEntitiesDetectionV2Jobs' {filter'} -> filter') (\s@ListEntitiesDetectionV2Jobs' {} a -> s {filter' = a} :: ListEntitiesDetectionV2Jobs)
+
+-- | The maximum number of results to return in each page. The default is
+-- 100.
+listEntitiesDetectionV2Jobs_maxResults :: Lens.Lens' ListEntitiesDetectionV2Jobs (Prelude.Maybe Prelude.Natural)
+listEntitiesDetectionV2Jobs_maxResults = Lens.lens (\ListEntitiesDetectionV2Jobs' {maxResults} -> maxResults) (\s@ListEntitiesDetectionV2Jobs' {} a -> s {maxResults = a} :: ListEntitiesDetectionV2Jobs)
+
+-- | Identifies the next page of results to return.
+listEntitiesDetectionV2Jobs_nextToken :: Lens.Lens' ListEntitiesDetectionV2Jobs (Prelude.Maybe Prelude.Text)
+listEntitiesDetectionV2Jobs_nextToken = Lens.lens (\ListEntitiesDetectionV2Jobs' {nextToken} -> nextToken) (\s@ListEntitiesDetectionV2Jobs' {} a -> s {nextToken = a} :: ListEntitiesDetectionV2Jobs)
+
+instance Core.AWSRequest ListEntitiesDetectionV2Jobs where
+  type
+    AWSResponse ListEntitiesDetectionV2Jobs =
+      ListEntitiesDetectionV2JobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEntitiesDetectionV2JobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ComprehendMedicalAsyncJobPropertiesList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEntitiesDetectionV2Jobs where
+  hashWithSalt _salt ListEntitiesDetectionV2Jobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListEntitiesDetectionV2Jobs where
+  rnf ListEntitiesDetectionV2Jobs' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListEntitiesDetectionV2Jobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.ListEntitiesDetectionV2Jobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListEntitiesDetectionV2Jobs where
+  toJSON ListEntitiesDetectionV2Jobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filter" Data..=) Prelude.<$> filter',
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListEntitiesDetectionV2Jobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListEntitiesDetectionV2Jobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListEntitiesDetectionV2JobsResponse' smart constructor.
+data ListEntitiesDetectionV2JobsResponse = ListEntitiesDetectionV2JobsResponse'
+  { -- | A list containing the properties of each job returned.
+    comprehendMedicalAsyncJobPropertiesList :: Prelude.Maybe [ComprehendMedicalAsyncJobProperties],
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEntitiesDetectionV2JobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobPropertiesList', 'listEntitiesDetectionV2JobsResponse_comprehendMedicalAsyncJobPropertiesList' - A list containing the properties of each job returned.
+--
+-- 'nextToken', 'listEntitiesDetectionV2JobsResponse_nextToken' - Identifies the next page of results to return.
+--
+-- 'httpStatus', 'listEntitiesDetectionV2JobsResponse_httpStatus' - The response's http status code.
+newListEntitiesDetectionV2JobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEntitiesDetectionV2JobsResponse
+newListEntitiesDetectionV2JobsResponse pHttpStatus_ =
+  ListEntitiesDetectionV2JobsResponse'
+    { comprehendMedicalAsyncJobPropertiesList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list containing the properties of each job returned.
+listEntitiesDetectionV2JobsResponse_comprehendMedicalAsyncJobPropertiesList :: Lens.Lens' ListEntitiesDetectionV2JobsResponse (Prelude.Maybe [ComprehendMedicalAsyncJobProperties])
+listEntitiesDetectionV2JobsResponse_comprehendMedicalAsyncJobPropertiesList = Lens.lens (\ListEntitiesDetectionV2JobsResponse' {comprehendMedicalAsyncJobPropertiesList} -> comprehendMedicalAsyncJobPropertiesList) (\s@ListEntitiesDetectionV2JobsResponse' {} a -> s {comprehendMedicalAsyncJobPropertiesList = a} :: ListEntitiesDetectionV2JobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Identifies the next page of results to return.
+listEntitiesDetectionV2JobsResponse_nextToken :: Lens.Lens' ListEntitiesDetectionV2JobsResponse (Prelude.Maybe Prelude.Text)
+listEntitiesDetectionV2JobsResponse_nextToken = Lens.lens (\ListEntitiesDetectionV2JobsResponse' {nextToken} -> nextToken) (\s@ListEntitiesDetectionV2JobsResponse' {} a -> s {nextToken = a} :: ListEntitiesDetectionV2JobsResponse)
+
+-- | The response's http status code.
+listEntitiesDetectionV2JobsResponse_httpStatus :: Lens.Lens' ListEntitiesDetectionV2JobsResponse Prelude.Int
+listEntitiesDetectionV2JobsResponse_httpStatus = Lens.lens (\ListEntitiesDetectionV2JobsResponse' {httpStatus} -> httpStatus) (\s@ListEntitiesDetectionV2JobsResponse' {} a -> s {httpStatus = a} :: ListEntitiesDetectionV2JobsResponse)
+
+instance
+  Prelude.NFData
+    ListEntitiesDetectionV2JobsResponse
+  where
+  rnf ListEntitiesDetectionV2JobsResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobPropertiesList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/ListICD10CMInferenceJobs.hs b/gen/Amazonka/ComprehendMedical/ListICD10CMInferenceJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/ListICD10CMInferenceJobs.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.ListICD10CMInferenceJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of InferICD10CM jobs that you have submitted.
+module Amazonka.ComprehendMedical.ListICD10CMInferenceJobs
+  ( -- * Creating a Request
+    ListICD10CMInferenceJobs (..),
+    newListICD10CMInferenceJobs,
+
+    -- * Request Lenses
+    listICD10CMInferenceJobs_filter,
+    listICD10CMInferenceJobs_maxResults,
+    listICD10CMInferenceJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListICD10CMInferenceJobsResponse (..),
+    newListICD10CMInferenceJobsResponse,
+
+    -- * Response Lenses
+    listICD10CMInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listICD10CMInferenceJobsResponse_nextToken,
+    listICD10CMInferenceJobsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListICD10CMInferenceJobs' smart constructor.
+data ListICD10CMInferenceJobs = ListICD10CMInferenceJobs'
+  { -- | Filters the jobs that are returned. You can filter jobs based on their
+    -- names, status, or the date and time that they were submitted. You can
+    -- only set one filter at a time.
+    filter' :: Prelude.Maybe ComprehendMedicalAsyncJobFilter,
+    -- | The maximum number of results to return in each page. The default is
+    -- 100.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListICD10CMInferenceJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'listICD10CMInferenceJobs_filter' - Filters the jobs that are returned. You can filter jobs based on their
+-- names, status, or the date and time that they were submitted. You can
+-- only set one filter at a time.
+--
+-- 'maxResults', 'listICD10CMInferenceJobs_maxResults' - The maximum number of results to return in each page. The default is
+-- 100.
+--
+-- 'nextToken', 'listICD10CMInferenceJobs_nextToken' - Identifies the next page of results to return.
+newListICD10CMInferenceJobs ::
+  ListICD10CMInferenceJobs
+newListICD10CMInferenceJobs =
+  ListICD10CMInferenceJobs'
+    { filter' =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Filters the jobs that are returned. You can filter jobs based on their
+-- names, status, or the date and time that they were submitted. You can
+-- only set one filter at a time.
+listICD10CMInferenceJobs_filter :: Lens.Lens' ListICD10CMInferenceJobs (Prelude.Maybe ComprehendMedicalAsyncJobFilter)
+listICD10CMInferenceJobs_filter = Lens.lens (\ListICD10CMInferenceJobs' {filter'} -> filter') (\s@ListICD10CMInferenceJobs' {} a -> s {filter' = a} :: ListICD10CMInferenceJobs)
+
+-- | The maximum number of results to return in each page. The default is
+-- 100.
+listICD10CMInferenceJobs_maxResults :: Lens.Lens' ListICD10CMInferenceJobs (Prelude.Maybe Prelude.Natural)
+listICD10CMInferenceJobs_maxResults = Lens.lens (\ListICD10CMInferenceJobs' {maxResults} -> maxResults) (\s@ListICD10CMInferenceJobs' {} a -> s {maxResults = a} :: ListICD10CMInferenceJobs)
+
+-- | Identifies the next page of results to return.
+listICD10CMInferenceJobs_nextToken :: Lens.Lens' ListICD10CMInferenceJobs (Prelude.Maybe Prelude.Text)
+listICD10CMInferenceJobs_nextToken = Lens.lens (\ListICD10CMInferenceJobs' {nextToken} -> nextToken) (\s@ListICD10CMInferenceJobs' {} a -> s {nextToken = a} :: ListICD10CMInferenceJobs)
+
+instance Core.AWSRequest ListICD10CMInferenceJobs where
+  type
+    AWSResponse ListICD10CMInferenceJobs =
+      ListICD10CMInferenceJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListICD10CMInferenceJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ComprehendMedicalAsyncJobPropertiesList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListICD10CMInferenceJobs where
+  hashWithSalt _salt ListICD10CMInferenceJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListICD10CMInferenceJobs where
+  rnf ListICD10CMInferenceJobs' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListICD10CMInferenceJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.ListICD10CMInferenceJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListICD10CMInferenceJobs where
+  toJSON ListICD10CMInferenceJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filter" Data..=) Prelude.<$> filter',
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListICD10CMInferenceJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListICD10CMInferenceJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListICD10CMInferenceJobsResponse' smart constructor.
+data ListICD10CMInferenceJobsResponse = ListICD10CMInferenceJobsResponse'
+  { -- | A list containing the properties of each job that is returned.
+    comprehendMedicalAsyncJobPropertiesList :: Prelude.Maybe [ComprehendMedicalAsyncJobProperties],
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListICD10CMInferenceJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobPropertiesList', 'listICD10CMInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList' - A list containing the properties of each job that is returned.
+--
+-- 'nextToken', 'listICD10CMInferenceJobsResponse_nextToken' - Identifies the next page of results to return.
+--
+-- 'httpStatus', 'listICD10CMInferenceJobsResponse_httpStatus' - The response's http status code.
+newListICD10CMInferenceJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListICD10CMInferenceJobsResponse
+newListICD10CMInferenceJobsResponse pHttpStatus_ =
+  ListICD10CMInferenceJobsResponse'
+    { comprehendMedicalAsyncJobPropertiesList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list containing the properties of each job that is returned.
+listICD10CMInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList :: Lens.Lens' ListICD10CMInferenceJobsResponse (Prelude.Maybe [ComprehendMedicalAsyncJobProperties])
+listICD10CMInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList = Lens.lens (\ListICD10CMInferenceJobsResponse' {comprehendMedicalAsyncJobPropertiesList} -> comprehendMedicalAsyncJobPropertiesList) (\s@ListICD10CMInferenceJobsResponse' {} a -> s {comprehendMedicalAsyncJobPropertiesList = a} :: ListICD10CMInferenceJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Identifies the next page of results to return.
+listICD10CMInferenceJobsResponse_nextToken :: Lens.Lens' ListICD10CMInferenceJobsResponse (Prelude.Maybe Prelude.Text)
+listICD10CMInferenceJobsResponse_nextToken = Lens.lens (\ListICD10CMInferenceJobsResponse' {nextToken} -> nextToken) (\s@ListICD10CMInferenceJobsResponse' {} a -> s {nextToken = a} :: ListICD10CMInferenceJobsResponse)
+
+-- | The response's http status code.
+listICD10CMInferenceJobsResponse_httpStatus :: Lens.Lens' ListICD10CMInferenceJobsResponse Prelude.Int
+listICD10CMInferenceJobsResponse_httpStatus = Lens.lens (\ListICD10CMInferenceJobsResponse' {httpStatus} -> httpStatus) (\s@ListICD10CMInferenceJobsResponse' {} a -> s {httpStatus = a} :: ListICD10CMInferenceJobsResponse)
+
+instance
+  Prelude.NFData
+    ListICD10CMInferenceJobsResponse
+  where
+  rnf ListICD10CMInferenceJobsResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobPropertiesList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/ListPHIDetectionJobs.hs b/gen/Amazonka/ComprehendMedical/ListPHIDetectionJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/ListPHIDetectionJobs.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.ListPHIDetectionJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of protected health information (PHI) detection jobs that
+-- you have submitted.
+module Amazonka.ComprehendMedical.ListPHIDetectionJobs
+  ( -- * Creating a Request
+    ListPHIDetectionJobs (..),
+    newListPHIDetectionJobs,
+
+    -- * Request Lenses
+    listPHIDetectionJobs_filter,
+    listPHIDetectionJobs_maxResults,
+    listPHIDetectionJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListPHIDetectionJobsResponse (..),
+    newListPHIDetectionJobsResponse,
+
+    -- * Response Lenses
+    listPHIDetectionJobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listPHIDetectionJobsResponse_nextToken,
+    listPHIDetectionJobsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPHIDetectionJobs' smart constructor.
+data ListPHIDetectionJobs = ListPHIDetectionJobs'
+  { -- | Filters the jobs that are returned. You can filter jobs based on their
+    -- names, status, or the date and time that they were submitted. You can
+    -- only set one filter at a time.
+    filter' :: Prelude.Maybe ComprehendMedicalAsyncJobFilter,
+    -- | The maximum number of results to return in each page. The default is
+    -- 100.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPHIDetectionJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'listPHIDetectionJobs_filter' - Filters the jobs that are returned. You can filter jobs based on their
+-- names, status, or the date and time that they were submitted. You can
+-- only set one filter at a time.
+--
+-- 'maxResults', 'listPHIDetectionJobs_maxResults' - The maximum number of results to return in each page. The default is
+-- 100.
+--
+-- 'nextToken', 'listPHIDetectionJobs_nextToken' - Identifies the next page of results to return.
+newListPHIDetectionJobs ::
+  ListPHIDetectionJobs
+newListPHIDetectionJobs =
+  ListPHIDetectionJobs'
+    { filter' = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Filters the jobs that are returned. You can filter jobs based on their
+-- names, status, or the date and time that they were submitted. You can
+-- only set one filter at a time.
+listPHIDetectionJobs_filter :: Lens.Lens' ListPHIDetectionJobs (Prelude.Maybe ComprehendMedicalAsyncJobFilter)
+listPHIDetectionJobs_filter = Lens.lens (\ListPHIDetectionJobs' {filter'} -> filter') (\s@ListPHIDetectionJobs' {} a -> s {filter' = a} :: ListPHIDetectionJobs)
+
+-- | The maximum number of results to return in each page. The default is
+-- 100.
+listPHIDetectionJobs_maxResults :: Lens.Lens' ListPHIDetectionJobs (Prelude.Maybe Prelude.Natural)
+listPHIDetectionJobs_maxResults = Lens.lens (\ListPHIDetectionJobs' {maxResults} -> maxResults) (\s@ListPHIDetectionJobs' {} a -> s {maxResults = a} :: ListPHIDetectionJobs)
+
+-- | Identifies the next page of results to return.
+listPHIDetectionJobs_nextToken :: Lens.Lens' ListPHIDetectionJobs (Prelude.Maybe Prelude.Text)
+listPHIDetectionJobs_nextToken = Lens.lens (\ListPHIDetectionJobs' {nextToken} -> nextToken) (\s@ListPHIDetectionJobs' {} a -> s {nextToken = a} :: ListPHIDetectionJobs)
+
+instance Core.AWSRequest ListPHIDetectionJobs where
+  type
+    AWSResponse ListPHIDetectionJobs =
+      ListPHIDetectionJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPHIDetectionJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ComprehendMedicalAsyncJobPropertiesList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPHIDetectionJobs where
+  hashWithSalt _salt ListPHIDetectionJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListPHIDetectionJobs where
+  rnf ListPHIDetectionJobs' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListPHIDetectionJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.ListPHIDetectionJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPHIDetectionJobs where
+  toJSON ListPHIDetectionJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filter" Data..=) Prelude.<$> filter',
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListPHIDetectionJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListPHIDetectionJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListPHIDetectionJobsResponse' smart constructor.
+data ListPHIDetectionJobsResponse = ListPHIDetectionJobsResponse'
+  { -- | A list containing the properties of each job returned.
+    comprehendMedicalAsyncJobPropertiesList :: Prelude.Maybe [ComprehendMedicalAsyncJobProperties],
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPHIDetectionJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobPropertiesList', 'listPHIDetectionJobsResponse_comprehendMedicalAsyncJobPropertiesList' - A list containing the properties of each job returned.
+--
+-- 'nextToken', 'listPHIDetectionJobsResponse_nextToken' - Identifies the next page of results to return.
+--
+-- 'httpStatus', 'listPHIDetectionJobsResponse_httpStatus' - The response's http status code.
+newListPHIDetectionJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPHIDetectionJobsResponse
+newListPHIDetectionJobsResponse pHttpStatus_ =
+  ListPHIDetectionJobsResponse'
+    { comprehendMedicalAsyncJobPropertiesList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list containing the properties of each job returned.
+listPHIDetectionJobsResponse_comprehendMedicalAsyncJobPropertiesList :: Lens.Lens' ListPHIDetectionJobsResponse (Prelude.Maybe [ComprehendMedicalAsyncJobProperties])
+listPHIDetectionJobsResponse_comprehendMedicalAsyncJobPropertiesList = Lens.lens (\ListPHIDetectionJobsResponse' {comprehendMedicalAsyncJobPropertiesList} -> comprehendMedicalAsyncJobPropertiesList) (\s@ListPHIDetectionJobsResponse' {} a -> s {comprehendMedicalAsyncJobPropertiesList = a} :: ListPHIDetectionJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Identifies the next page of results to return.
+listPHIDetectionJobsResponse_nextToken :: Lens.Lens' ListPHIDetectionJobsResponse (Prelude.Maybe Prelude.Text)
+listPHIDetectionJobsResponse_nextToken = Lens.lens (\ListPHIDetectionJobsResponse' {nextToken} -> nextToken) (\s@ListPHIDetectionJobsResponse' {} a -> s {nextToken = a} :: ListPHIDetectionJobsResponse)
+
+-- | The response's http status code.
+listPHIDetectionJobsResponse_httpStatus :: Lens.Lens' ListPHIDetectionJobsResponse Prelude.Int
+listPHIDetectionJobsResponse_httpStatus = Lens.lens (\ListPHIDetectionJobsResponse' {httpStatus} -> httpStatus) (\s@ListPHIDetectionJobsResponse' {} a -> s {httpStatus = a} :: ListPHIDetectionJobsResponse)
+
+instance Prelude.NFData ListPHIDetectionJobsResponse where
+  rnf ListPHIDetectionJobsResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobPropertiesList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/ListRxNormInferenceJobs.hs b/gen/Amazonka/ComprehendMedical/ListRxNormInferenceJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/ListRxNormInferenceJobs.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.ListRxNormInferenceJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of InferRxNorm jobs that you have submitted.
+module Amazonka.ComprehendMedical.ListRxNormInferenceJobs
+  ( -- * Creating a Request
+    ListRxNormInferenceJobs (..),
+    newListRxNormInferenceJobs,
+
+    -- * Request Lenses
+    listRxNormInferenceJobs_filter,
+    listRxNormInferenceJobs_maxResults,
+    listRxNormInferenceJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListRxNormInferenceJobsResponse (..),
+    newListRxNormInferenceJobsResponse,
+
+    -- * Response Lenses
+    listRxNormInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listRxNormInferenceJobsResponse_nextToken,
+    listRxNormInferenceJobsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRxNormInferenceJobs' smart constructor.
+data ListRxNormInferenceJobs = ListRxNormInferenceJobs'
+  { -- | Filters the jobs that are returned. You can filter jobs based on their
+    -- names, status, or the date and time that they were submitted. You can
+    -- only set one filter at a time.
+    filter' :: Prelude.Maybe ComprehendMedicalAsyncJobFilter,
+    -- | Identifies the next page of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRxNormInferenceJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'listRxNormInferenceJobs_filter' - Filters the jobs that are returned. You can filter jobs based on their
+-- names, status, or the date and time that they were submitted. You can
+-- only set one filter at a time.
+--
+-- 'maxResults', 'listRxNormInferenceJobs_maxResults' - Identifies the next page of results to return.
+--
+-- 'nextToken', 'listRxNormInferenceJobs_nextToken' - Identifies the next page of results to return.
+newListRxNormInferenceJobs ::
+  ListRxNormInferenceJobs
+newListRxNormInferenceJobs =
+  ListRxNormInferenceJobs'
+    { filter' = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Filters the jobs that are returned. You can filter jobs based on their
+-- names, status, or the date and time that they were submitted. You can
+-- only set one filter at a time.
+listRxNormInferenceJobs_filter :: Lens.Lens' ListRxNormInferenceJobs (Prelude.Maybe ComprehendMedicalAsyncJobFilter)
+listRxNormInferenceJobs_filter = Lens.lens (\ListRxNormInferenceJobs' {filter'} -> filter') (\s@ListRxNormInferenceJobs' {} a -> s {filter' = a} :: ListRxNormInferenceJobs)
+
+-- | Identifies the next page of results to return.
+listRxNormInferenceJobs_maxResults :: Lens.Lens' ListRxNormInferenceJobs (Prelude.Maybe Prelude.Natural)
+listRxNormInferenceJobs_maxResults = Lens.lens (\ListRxNormInferenceJobs' {maxResults} -> maxResults) (\s@ListRxNormInferenceJobs' {} a -> s {maxResults = a} :: ListRxNormInferenceJobs)
+
+-- | Identifies the next page of results to return.
+listRxNormInferenceJobs_nextToken :: Lens.Lens' ListRxNormInferenceJobs (Prelude.Maybe Prelude.Text)
+listRxNormInferenceJobs_nextToken = Lens.lens (\ListRxNormInferenceJobs' {nextToken} -> nextToken) (\s@ListRxNormInferenceJobs' {} a -> s {nextToken = a} :: ListRxNormInferenceJobs)
+
+instance Core.AWSRequest ListRxNormInferenceJobs where
+  type
+    AWSResponse ListRxNormInferenceJobs =
+      ListRxNormInferenceJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRxNormInferenceJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ComprehendMedicalAsyncJobPropertiesList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRxNormInferenceJobs where
+  hashWithSalt _salt ListRxNormInferenceJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListRxNormInferenceJobs where
+  rnf ListRxNormInferenceJobs' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListRxNormInferenceJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.ListRxNormInferenceJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListRxNormInferenceJobs where
+  toJSON ListRxNormInferenceJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filter" Data..=) Prelude.<$> filter',
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListRxNormInferenceJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListRxNormInferenceJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListRxNormInferenceJobsResponse' smart constructor.
+data ListRxNormInferenceJobsResponse = ListRxNormInferenceJobsResponse'
+  { -- | The maximum number of results to return in each page. The default is
+    -- 100.
+    comprehendMedicalAsyncJobPropertiesList :: Prelude.Maybe [ComprehendMedicalAsyncJobProperties],
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRxNormInferenceJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobPropertiesList', 'listRxNormInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList' - The maximum number of results to return in each page. The default is
+-- 100.
+--
+-- 'nextToken', 'listRxNormInferenceJobsResponse_nextToken' - Identifies the next page of results to return.
+--
+-- 'httpStatus', 'listRxNormInferenceJobsResponse_httpStatus' - The response's http status code.
+newListRxNormInferenceJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRxNormInferenceJobsResponse
+newListRxNormInferenceJobsResponse pHttpStatus_ =
+  ListRxNormInferenceJobsResponse'
+    { comprehendMedicalAsyncJobPropertiesList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The maximum number of results to return in each page. The default is
+-- 100.
+listRxNormInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList :: Lens.Lens' ListRxNormInferenceJobsResponse (Prelude.Maybe [ComprehendMedicalAsyncJobProperties])
+listRxNormInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList = Lens.lens (\ListRxNormInferenceJobsResponse' {comprehendMedicalAsyncJobPropertiesList} -> comprehendMedicalAsyncJobPropertiesList) (\s@ListRxNormInferenceJobsResponse' {} a -> s {comprehendMedicalAsyncJobPropertiesList = a} :: ListRxNormInferenceJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Identifies the next page of results to return.
+listRxNormInferenceJobsResponse_nextToken :: Lens.Lens' ListRxNormInferenceJobsResponse (Prelude.Maybe Prelude.Text)
+listRxNormInferenceJobsResponse_nextToken = Lens.lens (\ListRxNormInferenceJobsResponse' {nextToken} -> nextToken) (\s@ListRxNormInferenceJobsResponse' {} a -> s {nextToken = a} :: ListRxNormInferenceJobsResponse)
+
+-- | The response's http status code.
+listRxNormInferenceJobsResponse_httpStatus :: Lens.Lens' ListRxNormInferenceJobsResponse Prelude.Int
+listRxNormInferenceJobsResponse_httpStatus = Lens.lens (\ListRxNormInferenceJobsResponse' {httpStatus} -> httpStatus) (\s@ListRxNormInferenceJobsResponse' {} a -> s {httpStatus = a} :: ListRxNormInferenceJobsResponse)
+
+instance
+  Prelude.NFData
+    ListRxNormInferenceJobsResponse
+  where
+  rnf ListRxNormInferenceJobsResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobPropertiesList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/ListSNOMEDCTInferenceJobs.hs b/gen/Amazonka/ComprehendMedical/ListSNOMEDCTInferenceJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/ListSNOMEDCTInferenceJobs.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.ListSNOMEDCTInferenceJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of InferSNOMEDCT jobs a user has submitted.
+module Amazonka.ComprehendMedical.ListSNOMEDCTInferenceJobs
+  ( -- * Creating a Request
+    ListSNOMEDCTInferenceJobs (..),
+    newListSNOMEDCTInferenceJobs,
+
+    -- * Request Lenses
+    listSNOMEDCTInferenceJobs_filter,
+    listSNOMEDCTInferenceJobs_maxResults,
+    listSNOMEDCTInferenceJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListSNOMEDCTInferenceJobsResponse (..),
+    newListSNOMEDCTInferenceJobsResponse,
+
+    -- * Response Lenses
+    listSNOMEDCTInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList,
+    listSNOMEDCTInferenceJobsResponse_nextToken,
+    listSNOMEDCTInferenceJobsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSNOMEDCTInferenceJobs' smart constructor.
+data ListSNOMEDCTInferenceJobs = ListSNOMEDCTInferenceJobs'
+  { filter' :: Prelude.Maybe ComprehendMedicalAsyncJobFilter,
+    -- | The maximum number of results to return in each page. The default is
+    -- 100.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Identifies the next page of InferSNOMEDCT results to return.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSNOMEDCTInferenceJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'listSNOMEDCTInferenceJobs_filter' - Undocumented member.
+--
+-- 'maxResults', 'listSNOMEDCTInferenceJobs_maxResults' - The maximum number of results to return in each page. The default is
+-- 100.
+--
+-- 'nextToken', 'listSNOMEDCTInferenceJobs_nextToken' - Identifies the next page of InferSNOMEDCT results to return.
+newListSNOMEDCTInferenceJobs ::
+  ListSNOMEDCTInferenceJobs
+newListSNOMEDCTInferenceJobs =
+  ListSNOMEDCTInferenceJobs'
+    { filter' =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+listSNOMEDCTInferenceJobs_filter :: Lens.Lens' ListSNOMEDCTInferenceJobs (Prelude.Maybe ComprehendMedicalAsyncJobFilter)
+listSNOMEDCTInferenceJobs_filter = Lens.lens (\ListSNOMEDCTInferenceJobs' {filter'} -> filter') (\s@ListSNOMEDCTInferenceJobs' {} a -> s {filter' = a} :: ListSNOMEDCTInferenceJobs)
+
+-- | The maximum number of results to return in each page. The default is
+-- 100.
+listSNOMEDCTInferenceJobs_maxResults :: Lens.Lens' ListSNOMEDCTInferenceJobs (Prelude.Maybe Prelude.Natural)
+listSNOMEDCTInferenceJobs_maxResults = Lens.lens (\ListSNOMEDCTInferenceJobs' {maxResults} -> maxResults) (\s@ListSNOMEDCTInferenceJobs' {} a -> s {maxResults = a} :: ListSNOMEDCTInferenceJobs)
+
+-- | Identifies the next page of InferSNOMEDCT results to return.
+listSNOMEDCTInferenceJobs_nextToken :: Lens.Lens' ListSNOMEDCTInferenceJobs (Prelude.Maybe Prelude.Text)
+listSNOMEDCTInferenceJobs_nextToken = Lens.lens (\ListSNOMEDCTInferenceJobs' {nextToken} -> nextToken) (\s@ListSNOMEDCTInferenceJobs' {} a -> s {nextToken = a} :: ListSNOMEDCTInferenceJobs)
+
+instance Core.AWSRequest ListSNOMEDCTInferenceJobs where
+  type
+    AWSResponse ListSNOMEDCTInferenceJobs =
+      ListSNOMEDCTInferenceJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSNOMEDCTInferenceJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ComprehendMedicalAsyncJobPropertiesList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSNOMEDCTInferenceJobs where
+  hashWithSalt _salt ListSNOMEDCTInferenceJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListSNOMEDCTInferenceJobs where
+  rnf ListSNOMEDCTInferenceJobs' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListSNOMEDCTInferenceJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.ListSNOMEDCTInferenceJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSNOMEDCTInferenceJobs where
+  toJSON ListSNOMEDCTInferenceJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filter" Data..=) Prelude.<$> filter',
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListSNOMEDCTInferenceJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSNOMEDCTInferenceJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSNOMEDCTInferenceJobsResponse' smart constructor.
+data ListSNOMEDCTInferenceJobsResponse = ListSNOMEDCTInferenceJobsResponse'
+  { -- | A list containing the properties of each job that is returned.
+    comprehendMedicalAsyncJobPropertiesList :: Prelude.Maybe [ComprehendMedicalAsyncJobProperties],
+    -- | Identifies the next page of results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSNOMEDCTInferenceJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comprehendMedicalAsyncJobPropertiesList', 'listSNOMEDCTInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList' - A list containing the properties of each job that is returned.
+--
+-- 'nextToken', 'listSNOMEDCTInferenceJobsResponse_nextToken' - Identifies the next page of results to return.
+--
+-- 'httpStatus', 'listSNOMEDCTInferenceJobsResponse_httpStatus' - The response's http status code.
+newListSNOMEDCTInferenceJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSNOMEDCTInferenceJobsResponse
+newListSNOMEDCTInferenceJobsResponse pHttpStatus_ =
+  ListSNOMEDCTInferenceJobsResponse'
+    { comprehendMedicalAsyncJobPropertiesList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list containing the properties of each job that is returned.
+listSNOMEDCTInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList :: Lens.Lens' ListSNOMEDCTInferenceJobsResponse (Prelude.Maybe [ComprehendMedicalAsyncJobProperties])
+listSNOMEDCTInferenceJobsResponse_comprehendMedicalAsyncJobPropertiesList = Lens.lens (\ListSNOMEDCTInferenceJobsResponse' {comprehendMedicalAsyncJobPropertiesList} -> comprehendMedicalAsyncJobPropertiesList) (\s@ListSNOMEDCTInferenceJobsResponse' {} a -> s {comprehendMedicalAsyncJobPropertiesList = a} :: ListSNOMEDCTInferenceJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Identifies the next page of results to return.
+listSNOMEDCTInferenceJobsResponse_nextToken :: Lens.Lens' ListSNOMEDCTInferenceJobsResponse (Prelude.Maybe Prelude.Text)
+listSNOMEDCTInferenceJobsResponse_nextToken = Lens.lens (\ListSNOMEDCTInferenceJobsResponse' {nextToken} -> nextToken) (\s@ListSNOMEDCTInferenceJobsResponse' {} a -> s {nextToken = a} :: ListSNOMEDCTInferenceJobsResponse)
+
+-- | The response's http status code.
+listSNOMEDCTInferenceJobsResponse_httpStatus :: Lens.Lens' ListSNOMEDCTInferenceJobsResponse Prelude.Int
+listSNOMEDCTInferenceJobsResponse_httpStatus = Lens.lens (\ListSNOMEDCTInferenceJobsResponse' {httpStatus} -> httpStatus) (\s@ListSNOMEDCTInferenceJobsResponse' {} a -> s {httpStatus = a} :: ListSNOMEDCTInferenceJobsResponse)
+
+instance
+  Prelude.NFData
+    ListSNOMEDCTInferenceJobsResponse
+  where
+  rnf ListSNOMEDCTInferenceJobsResponse' {..} =
+    Prelude.rnf comprehendMedicalAsyncJobPropertiesList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StartEntitiesDetectionV2Job.hs b/gen/Amazonka/ComprehendMedical/StartEntitiesDetectionV2Job.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StartEntitiesDetectionV2Job.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StartEntitiesDetectionV2Job
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an asynchronous medical entity detection job for a collection of
+-- documents. Use the @DescribeEntitiesDetectionV2Job@ operation to track
+-- the status of a job.
+module Amazonka.ComprehendMedical.StartEntitiesDetectionV2Job
+  ( -- * Creating a Request
+    StartEntitiesDetectionV2Job (..),
+    newStartEntitiesDetectionV2Job,
+
+    -- * Request Lenses
+    startEntitiesDetectionV2Job_clientRequestToken,
+    startEntitiesDetectionV2Job_jobName,
+    startEntitiesDetectionV2Job_kmsKey,
+    startEntitiesDetectionV2Job_inputDataConfig,
+    startEntitiesDetectionV2Job_outputDataConfig,
+    startEntitiesDetectionV2Job_dataAccessRoleArn,
+    startEntitiesDetectionV2Job_languageCode,
+
+    -- * Destructuring the Response
+    StartEntitiesDetectionV2JobResponse (..),
+    newStartEntitiesDetectionV2JobResponse,
+
+    -- * Response Lenses
+    startEntitiesDetectionV2JobResponse_jobId,
+    startEntitiesDetectionV2JobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartEntitiesDetectionV2Job' smart constructor.
+data StartEntitiesDetectionV2Job = StartEntitiesDetectionV2Job'
+  { -- | A unique identifier for the request. If you don\'t set the client
+    -- request token, Comprehend Medical; generates one for you.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | An AWS Key Management Service key to encrypt your output files. If you
+    -- do not specify a key, the files are written in plain text.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    -- | The input configuration that specifies the format and location of the
+    -- input data for the job.
+    inputDataConfig :: InputDataConfig,
+    -- | The output configuration that specifies where to send the output files.
+    outputDataConfig :: OutputDataConfig,
+    -- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+    -- (IAM) role that grants Comprehend Medical; read access to your input
+    -- data. For more information, see
+    -- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+    dataAccessRoleArn :: Prelude.Text,
+    -- | The language of the input documents. All documents must be in the same
+    -- language. Comprehend Medical; processes files in US English (en).
+    languageCode :: LanguageCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartEntitiesDetectionV2Job' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'startEntitiesDetectionV2Job_clientRequestToken' - A unique identifier for the request. If you don\'t set the client
+-- request token, Comprehend Medical; generates one for you.
+--
+-- 'jobName', 'startEntitiesDetectionV2Job_jobName' - The identifier of the job.
+--
+-- 'kmsKey', 'startEntitiesDetectionV2Job_kmsKey' - An AWS Key Management Service key to encrypt your output files. If you
+-- do not specify a key, the files are written in plain text.
+--
+-- 'inputDataConfig', 'startEntitiesDetectionV2Job_inputDataConfig' - The input configuration that specifies the format and location of the
+-- input data for the job.
+--
+-- 'outputDataConfig', 'startEntitiesDetectionV2Job_outputDataConfig' - The output configuration that specifies where to send the output files.
+--
+-- 'dataAccessRoleArn', 'startEntitiesDetectionV2Job_dataAccessRoleArn' - The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Comprehend Medical; read access to your input
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+--
+-- 'languageCode', 'startEntitiesDetectionV2Job_languageCode' - The language of the input documents. All documents must be in the same
+-- language. Comprehend Medical; processes files in US English (en).
+newStartEntitiesDetectionV2Job ::
+  -- | 'inputDataConfig'
+  InputDataConfig ->
+  -- | 'outputDataConfig'
+  OutputDataConfig ->
+  -- | 'dataAccessRoleArn'
+  Prelude.Text ->
+  -- | 'languageCode'
+  LanguageCode ->
+  StartEntitiesDetectionV2Job
+newStartEntitiesDetectionV2Job
+  pInputDataConfig_
+  pOutputDataConfig_
+  pDataAccessRoleArn_
+  pLanguageCode_ =
+    StartEntitiesDetectionV2Job'
+      { clientRequestToken =
+          Prelude.Nothing,
+        jobName = Prelude.Nothing,
+        kmsKey = Prelude.Nothing,
+        inputDataConfig = pInputDataConfig_,
+        outputDataConfig = pOutputDataConfig_,
+        dataAccessRoleArn = pDataAccessRoleArn_,
+        languageCode = pLanguageCode_
+      }
+
+-- | A unique identifier for the request. If you don\'t set the client
+-- request token, Comprehend Medical; generates one for you.
+startEntitiesDetectionV2Job_clientRequestToken :: Lens.Lens' StartEntitiesDetectionV2Job (Prelude.Maybe Prelude.Text)
+startEntitiesDetectionV2Job_clientRequestToken = Lens.lens (\StartEntitiesDetectionV2Job' {clientRequestToken} -> clientRequestToken) (\s@StartEntitiesDetectionV2Job' {} a -> s {clientRequestToken = a} :: StartEntitiesDetectionV2Job)
+
+-- | The identifier of the job.
+startEntitiesDetectionV2Job_jobName :: Lens.Lens' StartEntitiesDetectionV2Job (Prelude.Maybe Prelude.Text)
+startEntitiesDetectionV2Job_jobName = Lens.lens (\StartEntitiesDetectionV2Job' {jobName} -> jobName) (\s@StartEntitiesDetectionV2Job' {} a -> s {jobName = a} :: StartEntitiesDetectionV2Job)
+
+-- | An AWS Key Management Service key to encrypt your output files. If you
+-- do not specify a key, the files are written in plain text.
+startEntitiesDetectionV2Job_kmsKey :: Lens.Lens' StartEntitiesDetectionV2Job (Prelude.Maybe Prelude.Text)
+startEntitiesDetectionV2Job_kmsKey = Lens.lens (\StartEntitiesDetectionV2Job' {kmsKey} -> kmsKey) (\s@StartEntitiesDetectionV2Job' {} a -> s {kmsKey = a} :: StartEntitiesDetectionV2Job)
+
+-- | The input configuration that specifies the format and location of the
+-- input data for the job.
+startEntitiesDetectionV2Job_inputDataConfig :: Lens.Lens' StartEntitiesDetectionV2Job InputDataConfig
+startEntitiesDetectionV2Job_inputDataConfig = Lens.lens (\StartEntitiesDetectionV2Job' {inputDataConfig} -> inputDataConfig) (\s@StartEntitiesDetectionV2Job' {} a -> s {inputDataConfig = a} :: StartEntitiesDetectionV2Job)
+
+-- | The output configuration that specifies where to send the output files.
+startEntitiesDetectionV2Job_outputDataConfig :: Lens.Lens' StartEntitiesDetectionV2Job OutputDataConfig
+startEntitiesDetectionV2Job_outputDataConfig = Lens.lens (\StartEntitiesDetectionV2Job' {outputDataConfig} -> outputDataConfig) (\s@StartEntitiesDetectionV2Job' {} a -> s {outputDataConfig = a} :: StartEntitiesDetectionV2Job)
+
+-- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Comprehend Medical; read access to your input
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+startEntitiesDetectionV2Job_dataAccessRoleArn :: Lens.Lens' StartEntitiesDetectionV2Job Prelude.Text
+startEntitiesDetectionV2Job_dataAccessRoleArn = Lens.lens (\StartEntitiesDetectionV2Job' {dataAccessRoleArn} -> dataAccessRoleArn) (\s@StartEntitiesDetectionV2Job' {} a -> s {dataAccessRoleArn = a} :: StartEntitiesDetectionV2Job)
+
+-- | The language of the input documents. All documents must be in the same
+-- language. Comprehend Medical; processes files in US English (en).
+startEntitiesDetectionV2Job_languageCode :: Lens.Lens' StartEntitiesDetectionV2Job LanguageCode
+startEntitiesDetectionV2Job_languageCode = Lens.lens (\StartEntitiesDetectionV2Job' {languageCode} -> languageCode) (\s@StartEntitiesDetectionV2Job' {} a -> s {languageCode = a} :: StartEntitiesDetectionV2Job)
+
+instance Core.AWSRequest StartEntitiesDetectionV2Job where
+  type
+    AWSResponse StartEntitiesDetectionV2Job =
+      StartEntitiesDetectionV2JobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartEntitiesDetectionV2JobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartEntitiesDetectionV2Job where
+  hashWithSalt _salt StartEntitiesDetectionV2Job' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` kmsKey
+      `Prelude.hashWithSalt` inputDataConfig
+      `Prelude.hashWithSalt` outputDataConfig
+      `Prelude.hashWithSalt` dataAccessRoleArn
+      `Prelude.hashWithSalt` languageCode
+
+instance Prelude.NFData StartEntitiesDetectionV2Job where
+  rnf StartEntitiesDetectionV2Job' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf inputDataConfig
+      `Prelude.seq` Prelude.rnf outputDataConfig
+      `Prelude.seq` Prelude.rnf dataAccessRoleArn
+      `Prelude.seq` Prelude.rnf languageCode
+
+instance Data.ToHeaders StartEntitiesDetectionV2Job where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StartEntitiesDetectionV2Job" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartEntitiesDetectionV2Job where
+  toJSON StartEntitiesDetectionV2Job' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("JobName" Data..=) Prelude.<$> jobName,
+            ("KMSKey" Data..=) Prelude.<$> kmsKey,
+            Prelude.Just
+              ("InputDataConfig" Data..= inputDataConfig),
+            Prelude.Just
+              ("OutputDataConfig" Data..= outputDataConfig),
+            Prelude.Just
+              ("DataAccessRoleArn" Data..= dataAccessRoleArn),
+            Prelude.Just ("LanguageCode" Data..= languageCode)
+          ]
+      )
+
+instance Data.ToPath StartEntitiesDetectionV2Job where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartEntitiesDetectionV2Job where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartEntitiesDetectionV2JobResponse' smart constructor.
+data StartEntitiesDetectionV2JobResponse = StartEntitiesDetectionV2JobResponse'
+  { -- | The identifier generated for the job. To get the status of a job, use
+    -- this identifier with the @DescribeEntitiesDetectionV2Job@ operation.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartEntitiesDetectionV2JobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'startEntitiesDetectionV2JobResponse_jobId' - The identifier generated for the job. To get the status of a job, use
+-- this identifier with the @DescribeEntitiesDetectionV2Job@ operation.
+--
+-- 'httpStatus', 'startEntitiesDetectionV2JobResponse_httpStatus' - The response's http status code.
+newStartEntitiesDetectionV2JobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartEntitiesDetectionV2JobResponse
+newStartEntitiesDetectionV2JobResponse pHttpStatus_ =
+  StartEntitiesDetectionV2JobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier generated for the job. To get the status of a job, use
+-- this identifier with the @DescribeEntitiesDetectionV2Job@ operation.
+startEntitiesDetectionV2JobResponse_jobId :: Lens.Lens' StartEntitiesDetectionV2JobResponse (Prelude.Maybe Prelude.Text)
+startEntitiesDetectionV2JobResponse_jobId = Lens.lens (\StartEntitiesDetectionV2JobResponse' {jobId} -> jobId) (\s@StartEntitiesDetectionV2JobResponse' {} a -> s {jobId = a} :: StartEntitiesDetectionV2JobResponse)
+
+-- | The response's http status code.
+startEntitiesDetectionV2JobResponse_httpStatus :: Lens.Lens' StartEntitiesDetectionV2JobResponse Prelude.Int
+startEntitiesDetectionV2JobResponse_httpStatus = Lens.lens (\StartEntitiesDetectionV2JobResponse' {httpStatus} -> httpStatus) (\s@StartEntitiesDetectionV2JobResponse' {} a -> s {httpStatus = a} :: StartEntitiesDetectionV2JobResponse)
+
+instance
+  Prelude.NFData
+    StartEntitiesDetectionV2JobResponse
+  where
+  rnf StartEntitiesDetectionV2JobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StartICD10CMInferenceJob.hs b/gen/Amazonka/ComprehendMedical/StartICD10CMInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StartICD10CMInferenceJob.hs
@@ -0,0 +1,292 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StartICD10CMInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an asynchronous job to detect medical conditions and link them to
+-- the ICD-10-CM ontology. Use the @DescribeICD10CMInferenceJob@ operation
+-- to track the status of a job.
+module Amazonka.ComprehendMedical.StartICD10CMInferenceJob
+  ( -- * Creating a Request
+    StartICD10CMInferenceJob (..),
+    newStartICD10CMInferenceJob,
+
+    -- * Request Lenses
+    startICD10CMInferenceJob_clientRequestToken,
+    startICD10CMInferenceJob_jobName,
+    startICD10CMInferenceJob_kmsKey,
+    startICD10CMInferenceJob_inputDataConfig,
+    startICD10CMInferenceJob_outputDataConfig,
+    startICD10CMInferenceJob_dataAccessRoleArn,
+    startICD10CMInferenceJob_languageCode,
+
+    -- * Destructuring the Response
+    StartICD10CMInferenceJobResponse (..),
+    newStartICD10CMInferenceJobResponse,
+
+    -- * Response Lenses
+    startICD10CMInferenceJobResponse_jobId,
+    startICD10CMInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartICD10CMInferenceJob' smart constructor.
+data StartICD10CMInferenceJob = StartICD10CMInferenceJob'
+  { -- | A unique identifier for the request. If you don\'t set the client
+    -- request token, Comprehend Medical; generates one.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | An AWS Key Management Service key to encrypt your output files. If you
+    -- do not specify a key, the files are written in plain text.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format and location of the input data for the job.
+    inputDataConfig :: InputDataConfig,
+    -- | Specifies where to send the output files.
+    outputDataConfig :: OutputDataConfig,
+    -- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+    -- (IAM) role that grants Comprehend Medical; read access to your input
+    -- data. For more information, see
+    -- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+    dataAccessRoleArn :: Prelude.Text,
+    -- | The language of the input documents. All documents must be in the same
+    -- language.
+    languageCode :: LanguageCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartICD10CMInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'startICD10CMInferenceJob_clientRequestToken' - A unique identifier for the request. If you don\'t set the client
+-- request token, Comprehend Medical; generates one.
+--
+-- 'jobName', 'startICD10CMInferenceJob_jobName' - The identifier of the job.
+--
+-- 'kmsKey', 'startICD10CMInferenceJob_kmsKey' - An AWS Key Management Service key to encrypt your output files. If you
+-- do not specify a key, the files are written in plain text.
+--
+-- 'inputDataConfig', 'startICD10CMInferenceJob_inputDataConfig' - Specifies the format and location of the input data for the job.
+--
+-- 'outputDataConfig', 'startICD10CMInferenceJob_outputDataConfig' - Specifies where to send the output files.
+--
+-- 'dataAccessRoleArn', 'startICD10CMInferenceJob_dataAccessRoleArn' - The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Comprehend Medical; read access to your input
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+--
+-- 'languageCode', 'startICD10CMInferenceJob_languageCode' - The language of the input documents. All documents must be in the same
+-- language.
+newStartICD10CMInferenceJob ::
+  -- | 'inputDataConfig'
+  InputDataConfig ->
+  -- | 'outputDataConfig'
+  OutputDataConfig ->
+  -- | 'dataAccessRoleArn'
+  Prelude.Text ->
+  -- | 'languageCode'
+  LanguageCode ->
+  StartICD10CMInferenceJob
+newStartICD10CMInferenceJob
+  pInputDataConfig_
+  pOutputDataConfig_
+  pDataAccessRoleArn_
+  pLanguageCode_ =
+    StartICD10CMInferenceJob'
+      { clientRequestToken =
+          Prelude.Nothing,
+        jobName = Prelude.Nothing,
+        kmsKey = Prelude.Nothing,
+        inputDataConfig = pInputDataConfig_,
+        outputDataConfig = pOutputDataConfig_,
+        dataAccessRoleArn = pDataAccessRoleArn_,
+        languageCode = pLanguageCode_
+      }
+
+-- | A unique identifier for the request. If you don\'t set the client
+-- request token, Comprehend Medical; generates one.
+startICD10CMInferenceJob_clientRequestToken :: Lens.Lens' StartICD10CMInferenceJob (Prelude.Maybe Prelude.Text)
+startICD10CMInferenceJob_clientRequestToken = Lens.lens (\StartICD10CMInferenceJob' {clientRequestToken} -> clientRequestToken) (\s@StartICD10CMInferenceJob' {} a -> s {clientRequestToken = a} :: StartICD10CMInferenceJob)
+
+-- | The identifier of the job.
+startICD10CMInferenceJob_jobName :: Lens.Lens' StartICD10CMInferenceJob (Prelude.Maybe Prelude.Text)
+startICD10CMInferenceJob_jobName = Lens.lens (\StartICD10CMInferenceJob' {jobName} -> jobName) (\s@StartICD10CMInferenceJob' {} a -> s {jobName = a} :: StartICD10CMInferenceJob)
+
+-- | An AWS Key Management Service key to encrypt your output files. If you
+-- do not specify a key, the files are written in plain text.
+startICD10CMInferenceJob_kmsKey :: Lens.Lens' StartICD10CMInferenceJob (Prelude.Maybe Prelude.Text)
+startICD10CMInferenceJob_kmsKey = Lens.lens (\StartICD10CMInferenceJob' {kmsKey} -> kmsKey) (\s@StartICD10CMInferenceJob' {} a -> s {kmsKey = a} :: StartICD10CMInferenceJob)
+
+-- | Specifies the format and location of the input data for the job.
+startICD10CMInferenceJob_inputDataConfig :: Lens.Lens' StartICD10CMInferenceJob InputDataConfig
+startICD10CMInferenceJob_inputDataConfig = Lens.lens (\StartICD10CMInferenceJob' {inputDataConfig} -> inputDataConfig) (\s@StartICD10CMInferenceJob' {} a -> s {inputDataConfig = a} :: StartICD10CMInferenceJob)
+
+-- | Specifies where to send the output files.
+startICD10CMInferenceJob_outputDataConfig :: Lens.Lens' StartICD10CMInferenceJob OutputDataConfig
+startICD10CMInferenceJob_outputDataConfig = Lens.lens (\StartICD10CMInferenceJob' {outputDataConfig} -> outputDataConfig) (\s@StartICD10CMInferenceJob' {} a -> s {outputDataConfig = a} :: StartICD10CMInferenceJob)
+
+-- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Comprehend Medical; read access to your input
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+startICD10CMInferenceJob_dataAccessRoleArn :: Lens.Lens' StartICD10CMInferenceJob Prelude.Text
+startICD10CMInferenceJob_dataAccessRoleArn = Lens.lens (\StartICD10CMInferenceJob' {dataAccessRoleArn} -> dataAccessRoleArn) (\s@StartICD10CMInferenceJob' {} a -> s {dataAccessRoleArn = a} :: StartICD10CMInferenceJob)
+
+-- | The language of the input documents. All documents must be in the same
+-- language.
+startICD10CMInferenceJob_languageCode :: Lens.Lens' StartICD10CMInferenceJob LanguageCode
+startICD10CMInferenceJob_languageCode = Lens.lens (\StartICD10CMInferenceJob' {languageCode} -> languageCode) (\s@StartICD10CMInferenceJob' {} a -> s {languageCode = a} :: StartICD10CMInferenceJob)
+
+instance Core.AWSRequest StartICD10CMInferenceJob where
+  type
+    AWSResponse StartICD10CMInferenceJob =
+      StartICD10CMInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartICD10CMInferenceJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartICD10CMInferenceJob where
+  hashWithSalt _salt StartICD10CMInferenceJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` kmsKey
+      `Prelude.hashWithSalt` inputDataConfig
+      `Prelude.hashWithSalt` outputDataConfig
+      `Prelude.hashWithSalt` dataAccessRoleArn
+      `Prelude.hashWithSalt` languageCode
+
+instance Prelude.NFData StartICD10CMInferenceJob where
+  rnf StartICD10CMInferenceJob' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf inputDataConfig
+      `Prelude.seq` Prelude.rnf outputDataConfig
+      `Prelude.seq` Prelude.rnf dataAccessRoleArn
+      `Prelude.seq` Prelude.rnf languageCode
+
+instance Data.ToHeaders StartICD10CMInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StartICD10CMInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartICD10CMInferenceJob where
+  toJSON StartICD10CMInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("JobName" Data..=) Prelude.<$> jobName,
+            ("KMSKey" Data..=) Prelude.<$> kmsKey,
+            Prelude.Just
+              ("InputDataConfig" Data..= inputDataConfig),
+            Prelude.Just
+              ("OutputDataConfig" Data..= outputDataConfig),
+            Prelude.Just
+              ("DataAccessRoleArn" Data..= dataAccessRoleArn),
+            Prelude.Just ("LanguageCode" Data..= languageCode)
+          ]
+      )
+
+instance Data.ToPath StartICD10CMInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartICD10CMInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartICD10CMInferenceJobResponse' smart constructor.
+data StartICD10CMInferenceJobResponse = StartICD10CMInferenceJobResponse'
+  { -- | The identifier generated for the job. To get the status of a job, use
+    -- this identifier with the @StartICD10CMInferenceJob@ operation.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartICD10CMInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'startICD10CMInferenceJobResponse_jobId' - The identifier generated for the job. To get the status of a job, use
+-- this identifier with the @StartICD10CMInferenceJob@ operation.
+--
+-- 'httpStatus', 'startICD10CMInferenceJobResponse_httpStatus' - The response's http status code.
+newStartICD10CMInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartICD10CMInferenceJobResponse
+newStartICD10CMInferenceJobResponse pHttpStatus_ =
+  StartICD10CMInferenceJobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier generated for the job. To get the status of a job, use
+-- this identifier with the @StartICD10CMInferenceJob@ operation.
+startICD10CMInferenceJobResponse_jobId :: Lens.Lens' StartICD10CMInferenceJobResponse (Prelude.Maybe Prelude.Text)
+startICD10CMInferenceJobResponse_jobId = Lens.lens (\StartICD10CMInferenceJobResponse' {jobId} -> jobId) (\s@StartICD10CMInferenceJobResponse' {} a -> s {jobId = a} :: StartICD10CMInferenceJobResponse)
+
+-- | The response's http status code.
+startICD10CMInferenceJobResponse_httpStatus :: Lens.Lens' StartICD10CMInferenceJobResponse Prelude.Int
+startICD10CMInferenceJobResponse_httpStatus = Lens.lens (\StartICD10CMInferenceJobResponse' {httpStatus} -> httpStatus) (\s@StartICD10CMInferenceJobResponse' {} a -> s {httpStatus = a} :: StartICD10CMInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    StartICD10CMInferenceJobResponse
+  where
+  rnf StartICD10CMInferenceJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StartPHIDetectionJob.hs b/gen/Amazonka/ComprehendMedical/StartPHIDetectionJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StartPHIDetectionJob.hs
@@ -0,0 +1,289 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StartPHIDetectionJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an asynchronous job to detect protected health information (PHI).
+-- Use the @DescribePHIDetectionJob@ operation to track the status of a
+-- job.
+module Amazonka.ComprehendMedical.StartPHIDetectionJob
+  ( -- * Creating a Request
+    StartPHIDetectionJob (..),
+    newStartPHIDetectionJob,
+
+    -- * Request Lenses
+    startPHIDetectionJob_clientRequestToken,
+    startPHIDetectionJob_jobName,
+    startPHIDetectionJob_kmsKey,
+    startPHIDetectionJob_inputDataConfig,
+    startPHIDetectionJob_outputDataConfig,
+    startPHIDetectionJob_dataAccessRoleArn,
+    startPHIDetectionJob_languageCode,
+
+    -- * Destructuring the Response
+    StartPHIDetectionJobResponse (..),
+    newStartPHIDetectionJobResponse,
+
+    -- * Response Lenses
+    startPHIDetectionJobResponse_jobId,
+    startPHIDetectionJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartPHIDetectionJob' smart constructor.
+data StartPHIDetectionJob = StartPHIDetectionJob'
+  { -- | A unique identifier for the request. If you don\'t set the client
+    -- request token, Comprehend Medical; generates one.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | An AWS Key Management Service key to encrypt your output files. If you
+    -- do not specify a key, the files are written in plain text.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format and location of the input data for the job.
+    inputDataConfig :: InputDataConfig,
+    -- | Specifies where to send the output files.
+    outputDataConfig :: OutputDataConfig,
+    -- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+    -- (IAM) role that grants Comprehend Medical; read access to your input
+    -- data. For more information, see
+    -- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+    dataAccessRoleArn :: Prelude.Text,
+    -- | The language of the input documents. All documents must be in the same
+    -- language.
+    languageCode :: LanguageCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartPHIDetectionJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'startPHIDetectionJob_clientRequestToken' - A unique identifier for the request. If you don\'t set the client
+-- request token, Comprehend Medical; generates one.
+--
+-- 'jobName', 'startPHIDetectionJob_jobName' - The identifier of the job.
+--
+-- 'kmsKey', 'startPHIDetectionJob_kmsKey' - An AWS Key Management Service key to encrypt your output files. If you
+-- do not specify a key, the files are written in plain text.
+--
+-- 'inputDataConfig', 'startPHIDetectionJob_inputDataConfig' - Specifies the format and location of the input data for the job.
+--
+-- 'outputDataConfig', 'startPHIDetectionJob_outputDataConfig' - Specifies where to send the output files.
+--
+-- 'dataAccessRoleArn', 'startPHIDetectionJob_dataAccessRoleArn' - The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Comprehend Medical; read access to your input
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+--
+-- 'languageCode', 'startPHIDetectionJob_languageCode' - The language of the input documents. All documents must be in the same
+-- language.
+newStartPHIDetectionJob ::
+  -- | 'inputDataConfig'
+  InputDataConfig ->
+  -- | 'outputDataConfig'
+  OutputDataConfig ->
+  -- | 'dataAccessRoleArn'
+  Prelude.Text ->
+  -- | 'languageCode'
+  LanguageCode ->
+  StartPHIDetectionJob
+newStartPHIDetectionJob
+  pInputDataConfig_
+  pOutputDataConfig_
+  pDataAccessRoleArn_
+  pLanguageCode_ =
+    StartPHIDetectionJob'
+      { clientRequestToken =
+          Prelude.Nothing,
+        jobName = Prelude.Nothing,
+        kmsKey = Prelude.Nothing,
+        inputDataConfig = pInputDataConfig_,
+        outputDataConfig = pOutputDataConfig_,
+        dataAccessRoleArn = pDataAccessRoleArn_,
+        languageCode = pLanguageCode_
+      }
+
+-- | A unique identifier for the request. If you don\'t set the client
+-- request token, Comprehend Medical; generates one.
+startPHIDetectionJob_clientRequestToken :: Lens.Lens' StartPHIDetectionJob (Prelude.Maybe Prelude.Text)
+startPHIDetectionJob_clientRequestToken = Lens.lens (\StartPHIDetectionJob' {clientRequestToken} -> clientRequestToken) (\s@StartPHIDetectionJob' {} a -> s {clientRequestToken = a} :: StartPHIDetectionJob)
+
+-- | The identifier of the job.
+startPHIDetectionJob_jobName :: Lens.Lens' StartPHIDetectionJob (Prelude.Maybe Prelude.Text)
+startPHIDetectionJob_jobName = Lens.lens (\StartPHIDetectionJob' {jobName} -> jobName) (\s@StartPHIDetectionJob' {} a -> s {jobName = a} :: StartPHIDetectionJob)
+
+-- | An AWS Key Management Service key to encrypt your output files. If you
+-- do not specify a key, the files are written in plain text.
+startPHIDetectionJob_kmsKey :: Lens.Lens' StartPHIDetectionJob (Prelude.Maybe Prelude.Text)
+startPHIDetectionJob_kmsKey = Lens.lens (\StartPHIDetectionJob' {kmsKey} -> kmsKey) (\s@StartPHIDetectionJob' {} a -> s {kmsKey = a} :: StartPHIDetectionJob)
+
+-- | Specifies the format and location of the input data for the job.
+startPHIDetectionJob_inputDataConfig :: Lens.Lens' StartPHIDetectionJob InputDataConfig
+startPHIDetectionJob_inputDataConfig = Lens.lens (\StartPHIDetectionJob' {inputDataConfig} -> inputDataConfig) (\s@StartPHIDetectionJob' {} a -> s {inputDataConfig = a} :: StartPHIDetectionJob)
+
+-- | Specifies where to send the output files.
+startPHIDetectionJob_outputDataConfig :: Lens.Lens' StartPHIDetectionJob OutputDataConfig
+startPHIDetectionJob_outputDataConfig = Lens.lens (\StartPHIDetectionJob' {outputDataConfig} -> outputDataConfig) (\s@StartPHIDetectionJob' {} a -> s {outputDataConfig = a} :: StartPHIDetectionJob)
+
+-- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Comprehend Medical; read access to your input
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+startPHIDetectionJob_dataAccessRoleArn :: Lens.Lens' StartPHIDetectionJob Prelude.Text
+startPHIDetectionJob_dataAccessRoleArn = Lens.lens (\StartPHIDetectionJob' {dataAccessRoleArn} -> dataAccessRoleArn) (\s@StartPHIDetectionJob' {} a -> s {dataAccessRoleArn = a} :: StartPHIDetectionJob)
+
+-- | The language of the input documents. All documents must be in the same
+-- language.
+startPHIDetectionJob_languageCode :: Lens.Lens' StartPHIDetectionJob LanguageCode
+startPHIDetectionJob_languageCode = Lens.lens (\StartPHIDetectionJob' {languageCode} -> languageCode) (\s@StartPHIDetectionJob' {} a -> s {languageCode = a} :: StartPHIDetectionJob)
+
+instance Core.AWSRequest StartPHIDetectionJob where
+  type
+    AWSResponse StartPHIDetectionJob =
+      StartPHIDetectionJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartPHIDetectionJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartPHIDetectionJob where
+  hashWithSalt _salt StartPHIDetectionJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` kmsKey
+      `Prelude.hashWithSalt` inputDataConfig
+      `Prelude.hashWithSalt` outputDataConfig
+      `Prelude.hashWithSalt` dataAccessRoleArn
+      `Prelude.hashWithSalt` languageCode
+
+instance Prelude.NFData StartPHIDetectionJob where
+  rnf StartPHIDetectionJob' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf inputDataConfig
+      `Prelude.seq` Prelude.rnf outputDataConfig
+      `Prelude.seq` Prelude.rnf dataAccessRoleArn
+      `Prelude.seq` Prelude.rnf languageCode
+
+instance Data.ToHeaders StartPHIDetectionJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StartPHIDetectionJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartPHIDetectionJob where
+  toJSON StartPHIDetectionJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("JobName" Data..=) Prelude.<$> jobName,
+            ("KMSKey" Data..=) Prelude.<$> kmsKey,
+            Prelude.Just
+              ("InputDataConfig" Data..= inputDataConfig),
+            Prelude.Just
+              ("OutputDataConfig" Data..= outputDataConfig),
+            Prelude.Just
+              ("DataAccessRoleArn" Data..= dataAccessRoleArn),
+            Prelude.Just ("LanguageCode" Data..= languageCode)
+          ]
+      )
+
+instance Data.ToPath StartPHIDetectionJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartPHIDetectionJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartPHIDetectionJobResponse' smart constructor.
+data StartPHIDetectionJobResponse = StartPHIDetectionJobResponse'
+  { -- | The identifier generated for the job. To get the status of a job, use
+    -- this identifier with the @DescribePHIDetectionJob@ operation.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartPHIDetectionJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'startPHIDetectionJobResponse_jobId' - The identifier generated for the job. To get the status of a job, use
+-- this identifier with the @DescribePHIDetectionJob@ operation.
+--
+-- 'httpStatus', 'startPHIDetectionJobResponse_httpStatus' - The response's http status code.
+newStartPHIDetectionJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartPHIDetectionJobResponse
+newStartPHIDetectionJobResponse pHttpStatus_ =
+  StartPHIDetectionJobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier generated for the job. To get the status of a job, use
+-- this identifier with the @DescribePHIDetectionJob@ operation.
+startPHIDetectionJobResponse_jobId :: Lens.Lens' StartPHIDetectionJobResponse (Prelude.Maybe Prelude.Text)
+startPHIDetectionJobResponse_jobId = Lens.lens (\StartPHIDetectionJobResponse' {jobId} -> jobId) (\s@StartPHIDetectionJobResponse' {} a -> s {jobId = a} :: StartPHIDetectionJobResponse)
+
+-- | The response's http status code.
+startPHIDetectionJobResponse_httpStatus :: Lens.Lens' StartPHIDetectionJobResponse Prelude.Int
+startPHIDetectionJobResponse_httpStatus = Lens.lens (\StartPHIDetectionJobResponse' {httpStatus} -> httpStatus) (\s@StartPHIDetectionJobResponse' {} a -> s {httpStatus = a} :: StartPHIDetectionJobResponse)
+
+instance Prelude.NFData StartPHIDetectionJobResponse where
+  rnf StartPHIDetectionJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StartRxNormInferenceJob.hs b/gen/Amazonka/ComprehendMedical/StartRxNormInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StartRxNormInferenceJob.hs
@@ -0,0 +1,289 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StartRxNormInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an asynchronous job to detect medication entities and link them
+-- to the RxNorm ontology. Use the @DescribeRxNormInferenceJob@ operation
+-- to track the status of a job.
+module Amazonka.ComprehendMedical.StartRxNormInferenceJob
+  ( -- * Creating a Request
+    StartRxNormInferenceJob (..),
+    newStartRxNormInferenceJob,
+
+    -- * Request Lenses
+    startRxNormInferenceJob_clientRequestToken,
+    startRxNormInferenceJob_jobName,
+    startRxNormInferenceJob_kmsKey,
+    startRxNormInferenceJob_inputDataConfig,
+    startRxNormInferenceJob_outputDataConfig,
+    startRxNormInferenceJob_dataAccessRoleArn,
+    startRxNormInferenceJob_languageCode,
+
+    -- * Destructuring the Response
+    StartRxNormInferenceJobResponse (..),
+    newStartRxNormInferenceJobResponse,
+
+    -- * Response Lenses
+    startRxNormInferenceJobResponse_jobId,
+    startRxNormInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartRxNormInferenceJob' smart constructor.
+data StartRxNormInferenceJob = StartRxNormInferenceJob'
+  { -- | A unique identifier for the request. If you don\'t set the client
+    -- request token, Comprehend Medical; generates one.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | An AWS Key Management Service key to encrypt your output files. If you
+    -- do not specify a key, the files are written in plain text.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the format and location of the input data for the job.
+    inputDataConfig :: InputDataConfig,
+    -- | Specifies where to send the output files.
+    outputDataConfig :: OutputDataConfig,
+    -- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+    -- (IAM) role that grants Comprehend Medical; read access to your input
+    -- data. For more information, see
+    -- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+    dataAccessRoleArn :: Prelude.Text,
+    -- | The language of the input documents. All documents must be in the same
+    -- language.
+    languageCode :: LanguageCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartRxNormInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'startRxNormInferenceJob_clientRequestToken' - A unique identifier for the request. If you don\'t set the client
+-- request token, Comprehend Medical; generates one.
+--
+-- 'jobName', 'startRxNormInferenceJob_jobName' - The identifier of the job.
+--
+-- 'kmsKey', 'startRxNormInferenceJob_kmsKey' - An AWS Key Management Service key to encrypt your output files. If you
+-- do not specify a key, the files are written in plain text.
+--
+-- 'inputDataConfig', 'startRxNormInferenceJob_inputDataConfig' - Specifies the format and location of the input data for the job.
+--
+-- 'outputDataConfig', 'startRxNormInferenceJob_outputDataConfig' - Specifies where to send the output files.
+--
+-- 'dataAccessRoleArn', 'startRxNormInferenceJob_dataAccessRoleArn' - The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Comprehend Medical; read access to your input
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+--
+-- 'languageCode', 'startRxNormInferenceJob_languageCode' - The language of the input documents. All documents must be in the same
+-- language.
+newStartRxNormInferenceJob ::
+  -- | 'inputDataConfig'
+  InputDataConfig ->
+  -- | 'outputDataConfig'
+  OutputDataConfig ->
+  -- | 'dataAccessRoleArn'
+  Prelude.Text ->
+  -- | 'languageCode'
+  LanguageCode ->
+  StartRxNormInferenceJob
+newStartRxNormInferenceJob
+  pInputDataConfig_
+  pOutputDataConfig_
+  pDataAccessRoleArn_
+  pLanguageCode_ =
+    StartRxNormInferenceJob'
+      { clientRequestToken =
+          Prelude.Nothing,
+        jobName = Prelude.Nothing,
+        kmsKey = Prelude.Nothing,
+        inputDataConfig = pInputDataConfig_,
+        outputDataConfig = pOutputDataConfig_,
+        dataAccessRoleArn = pDataAccessRoleArn_,
+        languageCode = pLanguageCode_
+      }
+
+-- | A unique identifier for the request. If you don\'t set the client
+-- request token, Comprehend Medical; generates one.
+startRxNormInferenceJob_clientRequestToken :: Lens.Lens' StartRxNormInferenceJob (Prelude.Maybe Prelude.Text)
+startRxNormInferenceJob_clientRequestToken = Lens.lens (\StartRxNormInferenceJob' {clientRequestToken} -> clientRequestToken) (\s@StartRxNormInferenceJob' {} a -> s {clientRequestToken = a} :: StartRxNormInferenceJob)
+
+-- | The identifier of the job.
+startRxNormInferenceJob_jobName :: Lens.Lens' StartRxNormInferenceJob (Prelude.Maybe Prelude.Text)
+startRxNormInferenceJob_jobName = Lens.lens (\StartRxNormInferenceJob' {jobName} -> jobName) (\s@StartRxNormInferenceJob' {} a -> s {jobName = a} :: StartRxNormInferenceJob)
+
+-- | An AWS Key Management Service key to encrypt your output files. If you
+-- do not specify a key, the files are written in plain text.
+startRxNormInferenceJob_kmsKey :: Lens.Lens' StartRxNormInferenceJob (Prelude.Maybe Prelude.Text)
+startRxNormInferenceJob_kmsKey = Lens.lens (\StartRxNormInferenceJob' {kmsKey} -> kmsKey) (\s@StartRxNormInferenceJob' {} a -> s {kmsKey = a} :: StartRxNormInferenceJob)
+
+-- | Specifies the format and location of the input data for the job.
+startRxNormInferenceJob_inputDataConfig :: Lens.Lens' StartRxNormInferenceJob InputDataConfig
+startRxNormInferenceJob_inputDataConfig = Lens.lens (\StartRxNormInferenceJob' {inputDataConfig} -> inputDataConfig) (\s@StartRxNormInferenceJob' {} a -> s {inputDataConfig = a} :: StartRxNormInferenceJob)
+
+-- | Specifies where to send the output files.
+startRxNormInferenceJob_outputDataConfig :: Lens.Lens' StartRxNormInferenceJob OutputDataConfig
+startRxNormInferenceJob_outputDataConfig = Lens.lens (\StartRxNormInferenceJob' {outputDataConfig} -> outputDataConfig) (\s@StartRxNormInferenceJob' {} a -> s {outputDataConfig = a} :: StartRxNormInferenceJob)
+
+-- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Comprehend Medical; read access to your input
+-- data. For more information, see
+-- <https://docs.aws.amazon.com/comprehend/latest/dg/access-control-managing-permissions-med.html#auth-role-permissions-med Role-Based Permissions Required for Asynchronous Operations>.
+startRxNormInferenceJob_dataAccessRoleArn :: Lens.Lens' StartRxNormInferenceJob Prelude.Text
+startRxNormInferenceJob_dataAccessRoleArn = Lens.lens (\StartRxNormInferenceJob' {dataAccessRoleArn} -> dataAccessRoleArn) (\s@StartRxNormInferenceJob' {} a -> s {dataAccessRoleArn = a} :: StartRxNormInferenceJob)
+
+-- | The language of the input documents. All documents must be in the same
+-- language.
+startRxNormInferenceJob_languageCode :: Lens.Lens' StartRxNormInferenceJob LanguageCode
+startRxNormInferenceJob_languageCode = Lens.lens (\StartRxNormInferenceJob' {languageCode} -> languageCode) (\s@StartRxNormInferenceJob' {} a -> s {languageCode = a} :: StartRxNormInferenceJob)
+
+instance Core.AWSRequest StartRxNormInferenceJob where
+  type
+    AWSResponse StartRxNormInferenceJob =
+      StartRxNormInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartRxNormInferenceJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartRxNormInferenceJob where
+  hashWithSalt _salt StartRxNormInferenceJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` kmsKey
+      `Prelude.hashWithSalt` inputDataConfig
+      `Prelude.hashWithSalt` outputDataConfig
+      `Prelude.hashWithSalt` dataAccessRoleArn
+      `Prelude.hashWithSalt` languageCode
+
+instance Prelude.NFData StartRxNormInferenceJob where
+  rnf StartRxNormInferenceJob' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf inputDataConfig
+      `Prelude.seq` Prelude.rnf outputDataConfig
+      `Prelude.seq` Prelude.rnf dataAccessRoleArn
+      `Prelude.seq` Prelude.rnf languageCode
+
+instance Data.ToHeaders StartRxNormInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StartRxNormInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartRxNormInferenceJob where
+  toJSON StartRxNormInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("JobName" Data..=) Prelude.<$> jobName,
+            ("KMSKey" Data..=) Prelude.<$> kmsKey,
+            Prelude.Just
+              ("InputDataConfig" Data..= inputDataConfig),
+            Prelude.Just
+              ("OutputDataConfig" Data..= outputDataConfig),
+            Prelude.Just
+              ("DataAccessRoleArn" Data..= dataAccessRoleArn),
+            Prelude.Just ("LanguageCode" Data..= languageCode)
+          ]
+      )
+
+instance Data.ToPath StartRxNormInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartRxNormInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartRxNormInferenceJobResponse' smart constructor.
+data StartRxNormInferenceJobResponse = StartRxNormInferenceJobResponse'
+  { -- | The identifier of the job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartRxNormInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'startRxNormInferenceJobResponse_jobId' - The identifier of the job.
+--
+-- 'httpStatus', 'startRxNormInferenceJobResponse_httpStatus' - The response's http status code.
+newStartRxNormInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartRxNormInferenceJobResponse
+newStartRxNormInferenceJobResponse pHttpStatus_ =
+  StartRxNormInferenceJobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the job.
+startRxNormInferenceJobResponse_jobId :: Lens.Lens' StartRxNormInferenceJobResponse (Prelude.Maybe Prelude.Text)
+startRxNormInferenceJobResponse_jobId = Lens.lens (\StartRxNormInferenceJobResponse' {jobId} -> jobId) (\s@StartRxNormInferenceJobResponse' {} a -> s {jobId = a} :: StartRxNormInferenceJobResponse)
+
+-- | The response's http status code.
+startRxNormInferenceJobResponse_httpStatus :: Lens.Lens' StartRxNormInferenceJobResponse Prelude.Int
+startRxNormInferenceJobResponse_httpStatus = Lens.lens (\StartRxNormInferenceJobResponse' {httpStatus} -> httpStatus) (\s@StartRxNormInferenceJobResponse' {} a -> s {httpStatus = a} :: StartRxNormInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    StartRxNormInferenceJobResponse
+  where
+  rnf StartRxNormInferenceJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StartSNOMEDCTInferenceJob.hs b/gen/Amazonka/ComprehendMedical/StartSNOMEDCTInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StartSNOMEDCTInferenceJob.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StartSNOMEDCTInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an asynchronous job to detect medical concepts and link them to
+-- the SNOMED-CT ontology. Use the DescribeSNOMEDCTInferenceJob operation
+-- to track the status of a job.
+module Amazonka.ComprehendMedical.StartSNOMEDCTInferenceJob
+  ( -- * Creating a Request
+    StartSNOMEDCTInferenceJob (..),
+    newStartSNOMEDCTInferenceJob,
+
+    -- * Request Lenses
+    startSNOMEDCTInferenceJob_clientRequestToken,
+    startSNOMEDCTInferenceJob_jobName,
+    startSNOMEDCTInferenceJob_kmsKey,
+    startSNOMEDCTInferenceJob_inputDataConfig,
+    startSNOMEDCTInferenceJob_outputDataConfig,
+    startSNOMEDCTInferenceJob_dataAccessRoleArn,
+    startSNOMEDCTInferenceJob_languageCode,
+
+    -- * Destructuring the Response
+    StartSNOMEDCTInferenceJobResponse (..),
+    newStartSNOMEDCTInferenceJobResponse,
+
+    -- * Response Lenses
+    startSNOMEDCTInferenceJobResponse_jobId,
+    startSNOMEDCTInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartSNOMEDCTInferenceJob' smart constructor.
+data StartSNOMEDCTInferenceJob = StartSNOMEDCTInferenceJob'
+  { -- | A unique identifier for the request. If you don\'t set the client
+    -- request token, Amazon Comprehend Medical generates one.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The user generated name the asynchronous InferSNOMEDCT job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | An AWS Key Management Service key used to encrypt your output files. If
+    -- you do not specify a key, the files are written in plain text.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    inputDataConfig :: InputDataConfig,
+    outputDataConfig :: OutputDataConfig,
+    -- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+    -- (IAM) role that grants Amazon Comprehend Medical read access to your
+    -- input data.
+    dataAccessRoleArn :: Prelude.Text,
+    -- | The language of the input documents. All documents must be in the same
+    -- language.
+    languageCode :: LanguageCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartSNOMEDCTInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'startSNOMEDCTInferenceJob_clientRequestToken' - A unique identifier for the request. If you don\'t set the client
+-- request token, Amazon Comprehend Medical generates one.
+--
+-- 'jobName', 'startSNOMEDCTInferenceJob_jobName' - The user generated name the asynchronous InferSNOMEDCT job.
+--
+-- 'kmsKey', 'startSNOMEDCTInferenceJob_kmsKey' - An AWS Key Management Service key used to encrypt your output files. If
+-- you do not specify a key, the files are written in plain text.
+--
+-- 'inputDataConfig', 'startSNOMEDCTInferenceJob_inputDataConfig' - Undocumented member.
+--
+-- 'outputDataConfig', 'startSNOMEDCTInferenceJob_outputDataConfig' - Undocumented member.
+--
+-- 'dataAccessRoleArn', 'startSNOMEDCTInferenceJob_dataAccessRoleArn' - The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Amazon Comprehend Medical read access to your
+-- input data.
+--
+-- 'languageCode', 'startSNOMEDCTInferenceJob_languageCode' - The language of the input documents. All documents must be in the same
+-- language.
+newStartSNOMEDCTInferenceJob ::
+  -- | 'inputDataConfig'
+  InputDataConfig ->
+  -- | 'outputDataConfig'
+  OutputDataConfig ->
+  -- | 'dataAccessRoleArn'
+  Prelude.Text ->
+  -- | 'languageCode'
+  LanguageCode ->
+  StartSNOMEDCTInferenceJob
+newStartSNOMEDCTInferenceJob
+  pInputDataConfig_
+  pOutputDataConfig_
+  pDataAccessRoleArn_
+  pLanguageCode_ =
+    StartSNOMEDCTInferenceJob'
+      { clientRequestToken =
+          Prelude.Nothing,
+        jobName = Prelude.Nothing,
+        kmsKey = Prelude.Nothing,
+        inputDataConfig = pInputDataConfig_,
+        outputDataConfig = pOutputDataConfig_,
+        dataAccessRoleArn = pDataAccessRoleArn_,
+        languageCode = pLanguageCode_
+      }
+
+-- | A unique identifier for the request. If you don\'t set the client
+-- request token, Amazon Comprehend Medical generates one.
+startSNOMEDCTInferenceJob_clientRequestToken :: Lens.Lens' StartSNOMEDCTInferenceJob (Prelude.Maybe Prelude.Text)
+startSNOMEDCTInferenceJob_clientRequestToken = Lens.lens (\StartSNOMEDCTInferenceJob' {clientRequestToken} -> clientRequestToken) (\s@StartSNOMEDCTInferenceJob' {} a -> s {clientRequestToken = a} :: StartSNOMEDCTInferenceJob)
+
+-- | The user generated name the asynchronous InferSNOMEDCT job.
+startSNOMEDCTInferenceJob_jobName :: Lens.Lens' StartSNOMEDCTInferenceJob (Prelude.Maybe Prelude.Text)
+startSNOMEDCTInferenceJob_jobName = Lens.lens (\StartSNOMEDCTInferenceJob' {jobName} -> jobName) (\s@StartSNOMEDCTInferenceJob' {} a -> s {jobName = a} :: StartSNOMEDCTInferenceJob)
+
+-- | An AWS Key Management Service key used to encrypt your output files. If
+-- you do not specify a key, the files are written in plain text.
+startSNOMEDCTInferenceJob_kmsKey :: Lens.Lens' StartSNOMEDCTInferenceJob (Prelude.Maybe Prelude.Text)
+startSNOMEDCTInferenceJob_kmsKey = Lens.lens (\StartSNOMEDCTInferenceJob' {kmsKey} -> kmsKey) (\s@StartSNOMEDCTInferenceJob' {} a -> s {kmsKey = a} :: StartSNOMEDCTInferenceJob)
+
+-- | Undocumented member.
+startSNOMEDCTInferenceJob_inputDataConfig :: Lens.Lens' StartSNOMEDCTInferenceJob InputDataConfig
+startSNOMEDCTInferenceJob_inputDataConfig = Lens.lens (\StartSNOMEDCTInferenceJob' {inputDataConfig} -> inputDataConfig) (\s@StartSNOMEDCTInferenceJob' {} a -> s {inputDataConfig = a} :: StartSNOMEDCTInferenceJob)
+
+-- | Undocumented member.
+startSNOMEDCTInferenceJob_outputDataConfig :: Lens.Lens' StartSNOMEDCTInferenceJob OutputDataConfig
+startSNOMEDCTInferenceJob_outputDataConfig = Lens.lens (\StartSNOMEDCTInferenceJob' {outputDataConfig} -> outputDataConfig) (\s@StartSNOMEDCTInferenceJob' {} a -> s {outputDataConfig = a} :: StartSNOMEDCTInferenceJob)
+
+-- | The Amazon Resource Name (ARN) of the AWS Identity and Access Management
+-- (IAM) role that grants Amazon Comprehend Medical read access to your
+-- input data.
+startSNOMEDCTInferenceJob_dataAccessRoleArn :: Lens.Lens' StartSNOMEDCTInferenceJob Prelude.Text
+startSNOMEDCTInferenceJob_dataAccessRoleArn = Lens.lens (\StartSNOMEDCTInferenceJob' {dataAccessRoleArn} -> dataAccessRoleArn) (\s@StartSNOMEDCTInferenceJob' {} a -> s {dataAccessRoleArn = a} :: StartSNOMEDCTInferenceJob)
+
+-- | The language of the input documents. All documents must be in the same
+-- language.
+startSNOMEDCTInferenceJob_languageCode :: Lens.Lens' StartSNOMEDCTInferenceJob LanguageCode
+startSNOMEDCTInferenceJob_languageCode = Lens.lens (\StartSNOMEDCTInferenceJob' {languageCode} -> languageCode) (\s@StartSNOMEDCTInferenceJob' {} a -> s {languageCode = a} :: StartSNOMEDCTInferenceJob)
+
+instance Core.AWSRequest StartSNOMEDCTInferenceJob where
+  type
+    AWSResponse StartSNOMEDCTInferenceJob =
+      StartSNOMEDCTInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartSNOMEDCTInferenceJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartSNOMEDCTInferenceJob where
+  hashWithSalt _salt StartSNOMEDCTInferenceJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` jobName
+      `Prelude.hashWithSalt` kmsKey
+      `Prelude.hashWithSalt` inputDataConfig
+      `Prelude.hashWithSalt` outputDataConfig
+      `Prelude.hashWithSalt` dataAccessRoleArn
+      `Prelude.hashWithSalt` languageCode
+
+instance Prelude.NFData StartSNOMEDCTInferenceJob where
+  rnf StartSNOMEDCTInferenceJob' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf inputDataConfig
+      `Prelude.seq` Prelude.rnf outputDataConfig
+      `Prelude.seq` Prelude.rnf dataAccessRoleArn
+      `Prelude.seq` Prelude.rnf languageCode
+
+instance Data.ToHeaders StartSNOMEDCTInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StartSNOMEDCTInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartSNOMEDCTInferenceJob where
+  toJSON StartSNOMEDCTInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("JobName" Data..=) Prelude.<$> jobName,
+            ("KMSKey" Data..=) Prelude.<$> kmsKey,
+            Prelude.Just
+              ("InputDataConfig" Data..= inputDataConfig),
+            Prelude.Just
+              ("OutputDataConfig" Data..= outputDataConfig),
+            Prelude.Just
+              ("DataAccessRoleArn" Data..= dataAccessRoleArn),
+            Prelude.Just ("LanguageCode" Data..= languageCode)
+          ]
+      )
+
+instance Data.ToPath StartSNOMEDCTInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartSNOMEDCTInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartSNOMEDCTInferenceJobResponse' smart constructor.
+data StartSNOMEDCTInferenceJobResponse = StartSNOMEDCTInferenceJobResponse'
+  { -- | The identifier generated for the job. To get the status of a job, use
+    -- this identifier with the StartSNOMEDCTInferenceJob operation.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartSNOMEDCTInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'startSNOMEDCTInferenceJobResponse_jobId' - The identifier generated for the job. To get the status of a job, use
+-- this identifier with the StartSNOMEDCTInferenceJob operation.
+--
+-- 'httpStatus', 'startSNOMEDCTInferenceJobResponse_httpStatus' - The response's http status code.
+newStartSNOMEDCTInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartSNOMEDCTInferenceJobResponse
+newStartSNOMEDCTInferenceJobResponse pHttpStatus_ =
+  StartSNOMEDCTInferenceJobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier generated for the job. To get the status of a job, use
+-- this identifier with the StartSNOMEDCTInferenceJob operation.
+startSNOMEDCTInferenceJobResponse_jobId :: Lens.Lens' StartSNOMEDCTInferenceJobResponse (Prelude.Maybe Prelude.Text)
+startSNOMEDCTInferenceJobResponse_jobId = Lens.lens (\StartSNOMEDCTInferenceJobResponse' {jobId} -> jobId) (\s@StartSNOMEDCTInferenceJobResponse' {} a -> s {jobId = a} :: StartSNOMEDCTInferenceJobResponse)
+
+-- | The response's http status code.
+startSNOMEDCTInferenceJobResponse_httpStatus :: Lens.Lens' StartSNOMEDCTInferenceJobResponse Prelude.Int
+startSNOMEDCTInferenceJobResponse_httpStatus = Lens.lens (\StartSNOMEDCTInferenceJobResponse' {httpStatus} -> httpStatus) (\s@StartSNOMEDCTInferenceJobResponse' {} a -> s {httpStatus = a} :: StartSNOMEDCTInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    StartSNOMEDCTInferenceJobResponse
+  where
+  rnf StartSNOMEDCTInferenceJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StopEntitiesDetectionV2Job.hs b/gen/Amazonka/ComprehendMedical/StopEntitiesDetectionV2Job.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StopEntitiesDetectionV2Job.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StopEntitiesDetectionV2Job
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a medical entities detection job in progress.
+module Amazonka.ComprehendMedical.StopEntitiesDetectionV2Job
+  ( -- * Creating a Request
+    StopEntitiesDetectionV2Job (..),
+    newStopEntitiesDetectionV2Job,
+
+    -- * Request Lenses
+    stopEntitiesDetectionV2Job_jobId,
+
+    -- * Destructuring the Response
+    StopEntitiesDetectionV2JobResponse (..),
+    newStopEntitiesDetectionV2JobResponse,
+
+    -- * Response Lenses
+    stopEntitiesDetectionV2JobResponse_jobId,
+    stopEntitiesDetectionV2JobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopEntitiesDetectionV2Job' smart constructor.
+data StopEntitiesDetectionV2Job = StopEntitiesDetectionV2Job'
+  { -- | The identifier of the medical entities job to stop.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopEntitiesDetectionV2Job' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopEntitiesDetectionV2Job_jobId' - The identifier of the medical entities job to stop.
+newStopEntitiesDetectionV2Job ::
+  -- | 'jobId'
+  Prelude.Text ->
+  StopEntitiesDetectionV2Job
+newStopEntitiesDetectionV2Job pJobId_ =
+  StopEntitiesDetectionV2Job' {jobId = pJobId_}
+
+-- | The identifier of the medical entities job to stop.
+stopEntitiesDetectionV2Job_jobId :: Lens.Lens' StopEntitiesDetectionV2Job Prelude.Text
+stopEntitiesDetectionV2Job_jobId = Lens.lens (\StopEntitiesDetectionV2Job' {jobId} -> jobId) (\s@StopEntitiesDetectionV2Job' {} a -> s {jobId = a} :: StopEntitiesDetectionV2Job)
+
+instance Core.AWSRequest StopEntitiesDetectionV2Job where
+  type
+    AWSResponse StopEntitiesDetectionV2Job =
+      StopEntitiesDetectionV2JobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopEntitiesDetectionV2JobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopEntitiesDetectionV2Job where
+  hashWithSalt _salt StopEntitiesDetectionV2Job' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData StopEntitiesDetectionV2Job where
+  rnf StopEntitiesDetectionV2Job' {..} =
+    Prelude.rnf jobId
+
+instance Data.ToHeaders StopEntitiesDetectionV2Job where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StopEntitiesDetectionV2Job" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopEntitiesDetectionV2Job where
+  toJSON StopEntitiesDetectionV2Job' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath StopEntitiesDetectionV2Job where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopEntitiesDetectionV2Job where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopEntitiesDetectionV2JobResponse' smart constructor.
+data StopEntitiesDetectionV2JobResponse = StopEntitiesDetectionV2JobResponse'
+  { -- | The identifier of the medical entities detection job that was stopped.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopEntitiesDetectionV2JobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopEntitiesDetectionV2JobResponse_jobId' - The identifier of the medical entities detection job that was stopped.
+--
+-- 'httpStatus', 'stopEntitiesDetectionV2JobResponse_httpStatus' - The response's http status code.
+newStopEntitiesDetectionV2JobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopEntitiesDetectionV2JobResponse
+newStopEntitiesDetectionV2JobResponse pHttpStatus_ =
+  StopEntitiesDetectionV2JobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the medical entities detection job that was stopped.
+stopEntitiesDetectionV2JobResponse_jobId :: Lens.Lens' StopEntitiesDetectionV2JobResponse (Prelude.Maybe Prelude.Text)
+stopEntitiesDetectionV2JobResponse_jobId = Lens.lens (\StopEntitiesDetectionV2JobResponse' {jobId} -> jobId) (\s@StopEntitiesDetectionV2JobResponse' {} a -> s {jobId = a} :: StopEntitiesDetectionV2JobResponse)
+
+-- | The response's http status code.
+stopEntitiesDetectionV2JobResponse_httpStatus :: Lens.Lens' StopEntitiesDetectionV2JobResponse Prelude.Int
+stopEntitiesDetectionV2JobResponse_httpStatus = Lens.lens (\StopEntitiesDetectionV2JobResponse' {httpStatus} -> httpStatus) (\s@StopEntitiesDetectionV2JobResponse' {} a -> s {httpStatus = a} :: StopEntitiesDetectionV2JobResponse)
+
+instance
+  Prelude.NFData
+    StopEntitiesDetectionV2JobResponse
+  where
+  rnf StopEntitiesDetectionV2JobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StopICD10CMInferenceJob.hs b/gen/Amazonka/ComprehendMedical/StopICD10CMInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StopICD10CMInferenceJob.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StopICD10CMInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops an InferICD10CM inference job in progress.
+module Amazonka.ComprehendMedical.StopICD10CMInferenceJob
+  ( -- * Creating a Request
+    StopICD10CMInferenceJob (..),
+    newStopICD10CMInferenceJob,
+
+    -- * Request Lenses
+    stopICD10CMInferenceJob_jobId,
+
+    -- * Destructuring the Response
+    StopICD10CMInferenceJobResponse (..),
+    newStopICD10CMInferenceJobResponse,
+
+    -- * Response Lenses
+    stopICD10CMInferenceJobResponse_jobId,
+    stopICD10CMInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopICD10CMInferenceJob' smart constructor.
+data StopICD10CMInferenceJob = StopICD10CMInferenceJob'
+  { -- | The identifier of the job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopICD10CMInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopICD10CMInferenceJob_jobId' - The identifier of the job.
+newStopICD10CMInferenceJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  StopICD10CMInferenceJob
+newStopICD10CMInferenceJob pJobId_ =
+  StopICD10CMInferenceJob' {jobId = pJobId_}
+
+-- | The identifier of the job.
+stopICD10CMInferenceJob_jobId :: Lens.Lens' StopICD10CMInferenceJob Prelude.Text
+stopICD10CMInferenceJob_jobId = Lens.lens (\StopICD10CMInferenceJob' {jobId} -> jobId) (\s@StopICD10CMInferenceJob' {} a -> s {jobId = a} :: StopICD10CMInferenceJob)
+
+instance Core.AWSRequest StopICD10CMInferenceJob where
+  type
+    AWSResponse StopICD10CMInferenceJob =
+      StopICD10CMInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopICD10CMInferenceJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopICD10CMInferenceJob where
+  hashWithSalt _salt StopICD10CMInferenceJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData StopICD10CMInferenceJob where
+  rnf StopICD10CMInferenceJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders StopICD10CMInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StopICD10CMInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopICD10CMInferenceJob where
+  toJSON StopICD10CMInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath StopICD10CMInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopICD10CMInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopICD10CMInferenceJobResponse' smart constructor.
+data StopICD10CMInferenceJobResponse = StopICD10CMInferenceJobResponse'
+  { -- | The identifier generated for the job. To get the status of job, use this
+    -- identifier with the @DescribeICD10CMInferenceJob@ operation.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopICD10CMInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopICD10CMInferenceJobResponse_jobId' - The identifier generated for the job. To get the status of job, use this
+-- identifier with the @DescribeICD10CMInferenceJob@ operation.
+--
+-- 'httpStatus', 'stopICD10CMInferenceJobResponse_httpStatus' - The response's http status code.
+newStopICD10CMInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopICD10CMInferenceJobResponse
+newStopICD10CMInferenceJobResponse pHttpStatus_ =
+  StopICD10CMInferenceJobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier generated for the job. To get the status of job, use this
+-- identifier with the @DescribeICD10CMInferenceJob@ operation.
+stopICD10CMInferenceJobResponse_jobId :: Lens.Lens' StopICD10CMInferenceJobResponse (Prelude.Maybe Prelude.Text)
+stopICD10CMInferenceJobResponse_jobId = Lens.lens (\StopICD10CMInferenceJobResponse' {jobId} -> jobId) (\s@StopICD10CMInferenceJobResponse' {} a -> s {jobId = a} :: StopICD10CMInferenceJobResponse)
+
+-- | The response's http status code.
+stopICD10CMInferenceJobResponse_httpStatus :: Lens.Lens' StopICD10CMInferenceJobResponse Prelude.Int
+stopICD10CMInferenceJobResponse_httpStatus = Lens.lens (\StopICD10CMInferenceJobResponse' {httpStatus} -> httpStatus) (\s@StopICD10CMInferenceJobResponse' {} a -> s {httpStatus = a} :: StopICD10CMInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    StopICD10CMInferenceJobResponse
+  where
+  rnf StopICD10CMInferenceJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StopPHIDetectionJob.hs b/gen/Amazonka/ComprehendMedical/StopPHIDetectionJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StopPHIDetectionJob.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StopPHIDetectionJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a protected health information (PHI) detection job in progress.
+module Amazonka.ComprehendMedical.StopPHIDetectionJob
+  ( -- * Creating a Request
+    StopPHIDetectionJob (..),
+    newStopPHIDetectionJob,
+
+    -- * Request Lenses
+    stopPHIDetectionJob_jobId,
+
+    -- * Destructuring the Response
+    StopPHIDetectionJobResponse (..),
+    newStopPHIDetectionJobResponse,
+
+    -- * Response Lenses
+    stopPHIDetectionJobResponse_jobId,
+    stopPHIDetectionJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopPHIDetectionJob' smart constructor.
+data StopPHIDetectionJob = StopPHIDetectionJob'
+  { -- | The identifier of the PHI detection job to stop.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopPHIDetectionJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopPHIDetectionJob_jobId' - The identifier of the PHI detection job to stop.
+newStopPHIDetectionJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  StopPHIDetectionJob
+newStopPHIDetectionJob pJobId_ =
+  StopPHIDetectionJob' {jobId = pJobId_}
+
+-- | The identifier of the PHI detection job to stop.
+stopPHIDetectionJob_jobId :: Lens.Lens' StopPHIDetectionJob Prelude.Text
+stopPHIDetectionJob_jobId = Lens.lens (\StopPHIDetectionJob' {jobId} -> jobId) (\s@StopPHIDetectionJob' {} a -> s {jobId = a} :: StopPHIDetectionJob)
+
+instance Core.AWSRequest StopPHIDetectionJob where
+  type
+    AWSResponse StopPHIDetectionJob =
+      StopPHIDetectionJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopPHIDetectionJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopPHIDetectionJob where
+  hashWithSalt _salt StopPHIDetectionJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData StopPHIDetectionJob where
+  rnf StopPHIDetectionJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders StopPHIDetectionJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StopPHIDetectionJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopPHIDetectionJob where
+  toJSON StopPHIDetectionJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath StopPHIDetectionJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopPHIDetectionJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopPHIDetectionJobResponse' smart constructor.
+data StopPHIDetectionJobResponse = StopPHIDetectionJobResponse'
+  { -- | The identifier of the PHI detection job that was stopped.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopPHIDetectionJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopPHIDetectionJobResponse_jobId' - The identifier of the PHI detection job that was stopped.
+--
+-- 'httpStatus', 'stopPHIDetectionJobResponse_httpStatus' - The response's http status code.
+newStopPHIDetectionJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopPHIDetectionJobResponse
+newStopPHIDetectionJobResponse pHttpStatus_ =
+  StopPHIDetectionJobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the PHI detection job that was stopped.
+stopPHIDetectionJobResponse_jobId :: Lens.Lens' StopPHIDetectionJobResponse (Prelude.Maybe Prelude.Text)
+stopPHIDetectionJobResponse_jobId = Lens.lens (\StopPHIDetectionJobResponse' {jobId} -> jobId) (\s@StopPHIDetectionJobResponse' {} a -> s {jobId = a} :: StopPHIDetectionJobResponse)
+
+-- | The response's http status code.
+stopPHIDetectionJobResponse_httpStatus :: Lens.Lens' StopPHIDetectionJobResponse Prelude.Int
+stopPHIDetectionJobResponse_httpStatus = Lens.lens (\StopPHIDetectionJobResponse' {httpStatus} -> httpStatus) (\s@StopPHIDetectionJobResponse' {} a -> s {httpStatus = a} :: StopPHIDetectionJobResponse)
+
+instance Prelude.NFData StopPHIDetectionJobResponse where
+  rnf StopPHIDetectionJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StopRxNormInferenceJob.hs b/gen/Amazonka/ComprehendMedical/StopRxNormInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StopRxNormInferenceJob.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StopRxNormInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops an InferRxNorm inference job in progress.
+module Amazonka.ComprehendMedical.StopRxNormInferenceJob
+  ( -- * Creating a Request
+    StopRxNormInferenceJob (..),
+    newStopRxNormInferenceJob,
+
+    -- * Request Lenses
+    stopRxNormInferenceJob_jobId,
+
+    -- * Destructuring the Response
+    StopRxNormInferenceJobResponse (..),
+    newStopRxNormInferenceJobResponse,
+
+    -- * Response Lenses
+    stopRxNormInferenceJobResponse_jobId,
+    stopRxNormInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopRxNormInferenceJob' smart constructor.
+data StopRxNormInferenceJob = StopRxNormInferenceJob'
+  { -- | The identifier of the job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopRxNormInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopRxNormInferenceJob_jobId' - The identifier of the job.
+newStopRxNormInferenceJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  StopRxNormInferenceJob
+newStopRxNormInferenceJob pJobId_ =
+  StopRxNormInferenceJob' {jobId = pJobId_}
+
+-- | The identifier of the job.
+stopRxNormInferenceJob_jobId :: Lens.Lens' StopRxNormInferenceJob Prelude.Text
+stopRxNormInferenceJob_jobId = Lens.lens (\StopRxNormInferenceJob' {jobId} -> jobId) (\s@StopRxNormInferenceJob' {} a -> s {jobId = a} :: StopRxNormInferenceJob)
+
+instance Core.AWSRequest StopRxNormInferenceJob where
+  type
+    AWSResponse StopRxNormInferenceJob =
+      StopRxNormInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopRxNormInferenceJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopRxNormInferenceJob where
+  hashWithSalt _salt StopRxNormInferenceJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData StopRxNormInferenceJob where
+  rnf StopRxNormInferenceJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders StopRxNormInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StopRxNormInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopRxNormInferenceJob where
+  toJSON StopRxNormInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath StopRxNormInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopRxNormInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopRxNormInferenceJobResponse' smart constructor.
+data StopRxNormInferenceJobResponse = StopRxNormInferenceJobResponse'
+  { -- | The identifier generated for the job. To get the status of job, use this
+    -- identifier with the @DescribeRxNormInferenceJob@ operation.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopRxNormInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopRxNormInferenceJobResponse_jobId' - The identifier generated for the job. To get the status of job, use this
+-- identifier with the @DescribeRxNormInferenceJob@ operation.
+--
+-- 'httpStatus', 'stopRxNormInferenceJobResponse_httpStatus' - The response's http status code.
+newStopRxNormInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopRxNormInferenceJobResponse
+newStopRxNormInferenceJobResponse pHttpStatus_ =
+  StopRxNormInferenceJobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier generated for the job. To get the status of job, use this
+-- identifier with the @DescribeRxNormInferenceJob@ operation.
+stopRxNormInferenceJobResponse_jobId :: Lens.Lens' StopRxNormInferenceJobResponse (Prelude.Maybe Prelude.Text)
+stopRxNormInferenceJobResponse_jobId = Lens.lens (\StopRxNormInferenceJobResponse' {jobId} -> jobId) (\s@StopRxNormInferenceJobResponse' {} a -> s {jobId = a} :: StopRxNormInferenceJobResponse)
+
+-- | The response's http status code.
+stopRxNormInferenceJobResponse_httpStatus :: Lens.Lens' StopRxNormInferenceJobResponse Prelude.Int
+stopRxNormInferenceJobResponse_httpStatus = Lens.lens (\StopRxNormInferenceJobResponse' {httpStatus} -> httpStatus) (\s@StopRxNormInferenceJobResponse' {} a -> s {httpStatus = a} :: StopRxNormInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    StopRxNormInferenceJobResponse
+  where
+  rnf StopRxNormInferenceJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/StopSNOMEDCTInferenceJob.hs b/gen/Amazonka/ComprehendMedical/StopSNOMEDCTInferenceJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/StopSNOMEDCTInferenceJob.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.StopSNOMEDCTInferenceJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops an InferSNOMEDCT inference job in progress.
+module Amazonka.ComprehendMedical.StopSNOMEDCTInferenceJob
+  ( -- * Creating a Request
+    StopSNOMEDCTInferenceJob (..),
+    newStopSNOMEDCTInferenceJob,
+
+    -- * Request Lenses
+    stopSNOMEDCTInferenceJob_jobId,
+
+    -- * Destructuring the Response
+    StopSNOMEDCTInferenceJobResponse (..),
+    newStopSNOMEDCTInferenceJobResponse,
+
+    -- * Response Lenses
+    stopSNOMEDCTInferenceJobResponse_jobId,
+    stopSNOMEDCTInferenceJobResponse_httpStatus,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopSNOMEDCTInferenceJob' smart constructor.
+data StopSNOMEDCTInferenceJob = StopSNOMEDCTInferenceJob'
+  { -- | The job id of the asynchronous InferSNOMEDCT job to be stopped.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopSNOMEDCTInferenceJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopSNOMEDCTInferenceJob_jobId' - The job id of the asynchronous InferSNOMEDCT job to be stopped.
+newStopSNOMEDCTInferenceJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  StopSNOMEDCTInferenceJob
+newStopSNOMEDCTInferenceJob pJobId_ =
+  StopSNOMEDCTInferenceJob' {jobId = pJobId_}
+
+-- | The job id of the asynchronous InferSNOMEDCT job to be stopped.
+stopSNOMEDCTInferenceJob_jobId :: Lens.Lens' StopSNOMEDCTInferenceJob Prelude.Text
+stopSNOMEDCTInferenceJob_jobId = Lens.lens (\StopSNOMEDCTInferenceJob' {jobId} -> jobId) (\s@StopSNOMEDCTInferenceJob' {} a -> s {jobId = a} :: StopSNOMEDCTInferenceJob)
+
+instance Core.AWSRequest StopSNOMEDCTInferenceJob where
+  type
+    AWSResponse StopSNOMEDCTInferenceJob =
+      StopSNOMEDCTInferenceJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopSNOMEDCTInferenceJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopSNOMEDCTInferenceJob where
+  hashWithSalt _salt StopSNOMEDCTInferenceJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData StopSNOMEDCTInferenceJob where
+  rnf StopSNOMEDCTInferenceJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders StopSNOMEDCTInferenceJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ComprehendMedical_20181030.StopSNOMEDCTInferenceJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopSNOMEDCTInferenceJob where
+  toJSON StopSNOMEDCTInferenceJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath StopSNOMEDCTInferenceJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopSNOMEDCTInferenceJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopSNOMEDCTInferenceJobResponse' smart constructor.
+data StopSNOMEDCTInferenceJobResponse = StopSNOMEDCTInferenceJobResponse'
+  { -- | The identifier generated for the job. To get the status of job, use this
+    -- identifier with the DescribeSNOMEDCTInferenceJob operation.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopSNOMEDCTInferenceJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'stopSNOMEDCTInferenceJobResponse_jobId' - The identifier generated for the job. To get the status of job, use this
+-- identifier with the DescribeSNOMEDCTInferenceJob operation.
+--
+-- 'httpStatus', 'stopSNOMEDCTInferenceJobResponse_httpStatus' - The response's http status code.
+newStopSNOMEDCTInferenceJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopSNOMEDCTInferenceJobResponse
+newStopSNOMEDCTInferenceJobResponse pHttpStatus_ =
+  StopSNOMEDCTInferenceJobResponse'
+    { jobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier generated for the job. To get the status of job, use this
+-- identifier with the DescribeSNOMEDCTInferenceJob operation.
+stopSNOMEDCTInferenceJobResponse_jobId :: Lens.Lens' StopSNOMEDCTInferenceJobResponse (Prelude.Maybe Prelude.Text)
+stopSNOMEDCTInferenceJobResponse_jobId = Lens.lens (\StopSNOMEDCTInferenceJobResponse' {jobId} -> jobId) (\s@StopSNOMEDCTInferenceJobResponse' {} a -> s {jobId = a} :: StopSNOMEDCTInferenceJobResponse)
+
+-- | The response's http status code.
+stopSNOMEDCTInferenceJobResponse_httpStatus :: Lens.Lens' StopSNOMEDCTInferenceJobResponse Prelude.Int
+stopSNOMEDCTInferenceJobResponse_httpStatus = Lens.lens (\StopSNOMEDCTInferenceJobResponse' {httpStatus} -> httpStatus) (\s@StopSNOMEDCTInferenceJobResponse' {} a -> s {httpStatus = a} :: StopSNOMEDCTInferenceJobResponse)
+
+instance
+  Prelude.NFData
+    StopSNOMEDCTInferenceJobResponse
+  where
+  rnf StopSNOMEDCTInferenceJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ComprehendMedical/Types.hs b/gen/Amazonka/ComprehendMedical/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types.hs
@@ -0,0 +1,482 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _InternalServerException,
+    _InvalidEncodingException,
+    _InvalidRequestException,
+    _ResourceNotFoundException,
+    _ServiceUnavailableException,
+    _TextSizeLimitExceededException,
+    _TooManyRequestsException,
+    _ValidationException,
+
+    -- * AttributeName
+    AttributeName (..),
+
+    -- * EntitySubType
+    EntitySubType (..),
+
+    -- * EntityType
+    EntityType (..),
+
+    -- * ICD10CMAttributeType
+    ICD10CMAttributeType (..),
+
+    -- * ICD10CMEntityCategory
+    ICD10CMEntityCategory (..),
+
+    -- * ICD10CMEntityType
+    ICD10CMEntityType (..),
+
+    -- * ICD10CMRelationshipType
+    ICD10CMRelationshipType (..),
+
+    -- * ICD10CMTraitName
+    ICD10CMTraitName (..),
+
+    -- * JobStatus
+    JobStatus (..),
+
+    -- * LanguageCode
+    LanguageCode (..),
+
+    -- * RelationshipType
+    RelationshipType (..),
+
+    -- * RxNormAttributeType
+    RxNormAttributeType (..),
+
+    -- * RxNormEntityCategory
+    RxNormEntityCategory (..),
+
+    -- * RxNormEntityType
+    RxNormEntityType (..),
+
+    -- * RxNormTraitName
+    RxNormTraitName (..),
+
+    -- * SNOMEDCTAttributeType
+    SNOMEDCTAttributeType (..),
+
+    -- * SNOMEDCTEntityCategory
+    SNOMEDCTEntityCategory (..),
+
+    -- * SNOMEDCTEntityType
+    SNOMEDCTEntityType (..),
+
+    -- * SNOMEDCTRelationshipType
+    SNOMEDCTRelationshipType (..),
+
+    -- * SNOMEDCTTraitName
+    SNOMEDCTTraitName (..),
+
+    -- * Attribute
+    Attribute (..),
+    newAttribute,
+    attribute_beginOffset,
+    attribute_category,
+    attribute_endOffset,
+    attribute_id,
+    attribute_relationshipScore,
+    attribute_relationshipType,
+    attribute_score,
+    attribute_text,
+    attribute_traits,
+    attribute_type,
+
+    -- * Characters
+    Characters (..),
+    newCharacters,
+    characters_originalTextCharacters,
+
+    -- * ComprehendMedicalAsyncJobFilter
+    ComprehendMedicalAsyncJobFilter (..),
+    newComprehendMedicalAsyncJobFilter,
+    comprehendMedicalAsyncJobFilter_jobName,
+    comprehendMedicalAsyncJobFilter_jobStatus,
+    comprehendMedicalAsyncJobFilter_submitTimeAfter,
+    comprehendMedicalAsyncJobFilter_submitTimeBefore,
+
+    -- * ComprehendMedicalAsyncJobProperties
+    ComprehendMedicalAsyncJobProperties (..),
+    newComprehendMedicalAsyncJobProperties,
+    comprehendMedicalAsyncJobProperties_dataAccessRoleArn,
+    comprehendMedicalAsyncJobProperties_endTime,
+    comprehendMedicalAsyncJobProperties_expirationTime,
+    comprehendMedicalAsyncJobProperties_inputDataConfig,
+    comprehendMedicalAsyncJobProperties_jobId,
+    comprehendMedicalAsyncJobProperties_jobName,
+    comprehendMedicalAsyncJobProperties_jobStatus,
+    comprehendMedicalAsyncJobProperties_kmsKey,
+    comprehendMedicalAsyncJobProperties_languageCode,
+    comprehendMedicalAsyncJobProperties_manifestFilePath,
+    comprehendMedicalAsyncJobProperties_message,
+    comprehendMedicalAsyncJobProperties_modelVersion,
+    comprehendMedicalAsyncJobProperties_outputDataConfig,
+    comprehendMedicalAsyncJobProperties_submitTime,
+
+    -- * Entity
+    Entity (..),
+    newEntity,
+    entity_attributes,
+    entity_beginOffset,
+    entity_category,
+    entity_endOffset,
+    entity_id,
+    entity_score,
+    entity_text,
+    entity_traits,
+    entity_type,
+
+    -- * ICD10CMAttribute
+    ICD10CMAttribute (..),
+    newICD10CMAttribute,
+    iCD10CMAttribute_beginOffset,
+    iCD10CMAttribute_category,
+    iCD10CMAttribute_endOffset,
+    iCD10CMAttribute_id,
+    iCD10CMAttribute_relationshipScore,
+    iCD10CMAttribute_relationshipType,
+    iCD10CMAttribute_score,
+    iCD10CMAttribute_text,
+    iCD10CMAttribute_traits,
+    iCD10CMAttribute_type,
+
+    -- * ICD10CMConcept
+    ICD10CMConcept (..),
+    newICD10CMConcept,
+    iCD10CMConcept_code,
+    iCD10CMConcept_description,
+    iCD10CMConcept_score,
+
+    -- * ICD10CMEntity
+    ICD10CMEntity (..),
+    newICD10CMEntity,
+    iCD10CMEntity_attributes,
+    iCD10CMEntity_beginOffset,
+    iCD10CMEntity_category,
+    iCD10CMEntity_endOffset,
+    iCD10CMEntity_iCD10CMConcepts,
+    iCD10CMEntity_id,
+    iCD10CMEntity_score,
+    iCD10CMEntity_text,
+    iCD10CMEntity_traits,
+    iCD10CMEntity_type,
+
+    -- * ICD10CMTrait
+    ICD10CMTrait (..),
+    newICD10CMTrait,
+    iCD10CMTrait_name,
+    iCD10CMTrait_score,
+
+    -- * InputDataConfig
+    InputDataConfig (..),
+    newInputDataConfig,
+    inputDataConfig_s3Key,
+    inputDataConfig_s3Bucket,
+
+    -- * OutputDataConfig
+    OutputDataConfig (..),
+    newOutputDataConfig,
+    outputDataConfig_s3Key,
+    outputDataConfig_s3Bucket,
+
+    -- * RxNormAttribute
+    RxNormAttribute (..),
+    newRxNormAttribute,
+    rxNormAttribute_beginOffset,
+    rxNormAttribute_endOffset,
+    rxNormAttribute_id,
+    rxNormAttribute_relationshipScore,
+    rxNormAttribute_score,
+    rxNormAttribute_text,
+    rxNormAttribute_traits,
+    rxNormAttribute_type,
+
+    -- * RxNormConcept
+    RxNormConcept (..),
+    newRxNormConcept,
+    rxNormConcept_code,
+    rxNormConcept_description,
+    rxNormConcept_score,
+
+    -- * RxNormEntity
+    RxNormEntity (..),
+    newRxNormEntity,
+    rxNormEntity_attributes,
+    rxNormEntity_beginOffset,
+    rxNormEntity_category,
+    rxNormEntity_endOffset,
+    rxNormEntity_id,
+    rxNormEntity_rxNormConcepts,
+    rxNormEntity_score,
+    rxNormEntity_text,
+    rxNormEntity_traits,
+    rxNormEntity_type,
+
+    -- * RxNormTrait
+    RxNormTrait (..),
+    newRxNormTrait,
+    rxNormTrait_name,
+    rxNormTrait_score,
+
+    -- * SNOMEDCTAttribute
+    SNOMEDCTAttribute (..),
+    newSNOMEDCTAttribute,
+    sNOMEDCTAttribute_beginOffset,
+    sNOMEDCTAttribute_category,
+    sNOMEDCTAttribute_endOffset,
+    sNOMEDCTAttribute_id,
+    sNOMEDCTAttribute_relationshipScore,
+    sNOMEDCTAttribute_relationshipType,
+    sNOMEDCTAttribute_sNOMEDCTConcepts,
+    sNOMEDCTAttribute_score,
+    sNOMEDCTAttribute_text,
+    sNOMEDCTAttribute_traits,
+    sNOMEDCTAttribute_type,
+
+    -- * SNOMEDCTConcept
+    SNOMEDCTConcept (..),
+    newSNOMEDCTConcept,
+    sNOMEDCTConcept_code,
+    sNOMEDCTConcept_description,
+    sNOMEDCTConcept_score,
+
+    -- * SNOMEDCTDetails
+    SNOMEDCTDetails (..),
+    newSNOMEDCTDetails,
+    sNOMEDCTDetails_edition,
+    sNOMEDCTDetails_language,
+    sNOMEDCTDetails_versionDate,
+
+    -- * SNOMEDCTEntity
+    SNOMEDCTEntity (..),
+    newSNOMEDCTEntity,
+    sNOMEDCTEntity_attributes,
+    sNOMEDCTEntity_beginOffset,
+    sNOMEDCTEntity_category,
+    sNOMEDCTEntity_endOffset,
+    sNOMEDCTEntity_id,
+    sNOMEDCTEntity_sNOMEDCTConcepts,
+    sNOMEDCTEntity_score,
+    sNOMEDCTEntity_text,
+    sNOMEDCTEntity_traits,
+    sNOMEDCTEntity_type,
+
+    -- * SNOMEDCTTrait
+    SNOMEDCTTrait (..),
+    newSNOMEDCTTrait,
+    sNOMEDCTTrait_name,
+    sNOMEDCTTrait_score,
+
+    -- * Trait
+    Trait (..),
+    newTrait,
+    trait_name,
+    trait_score,
+
+    -- * UnmappedAttribute
+    UnmappedAttribute (..),
+    newUnmappedAttribute,
+    unmappedAttribute_attribute,
+    unmappedAttribute_type,
+  )
+where
+
+import Amazonka.ComprehendMedical.Types.Attribute
+import Amazonka.ComprehendMedical.Types.AttributeName
+import Amazonka.ComprehendMedical.Types.Characters
+import Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobFilter
+import Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobProperties
+import Amazonka.ComprehendMedical.Types.Entity
+import Amazonka.ComprehendMedical.Types.EntitySubType
+import Amazonka.ComprehendMedical.Types.EntityType
+import Amazonka.ComprehendMedical.Types.ICD10CMAttribute
+import Amazonka.ComprehendMedical.Types.ICD10CMAttributeType
+import Amazonka.ComprehendMedical.Types.ICD10CMConcept
+import Amazonka.ComprehendMedical.Types.ICD10CMEntity
+import Amazonka.ComprehendMedical.Types.ICD10CMEntityCategory
+import Amazonka.ComprehendMedical.Types.ICD10CMEntityType
+import Amazonka.ComprehendMedical.Types.ICD10CMRelationshipType
+import Amazonka.ComprehendMedical.Types.ICD10CMTrait
+import Amazonka.ComprehendMedical.Types.ICD10CMTraitName
+import Amazonka.ComprehendMedical.Types.InputDataConfig
+import Amazonka.ComprehendMedical.Types.JobStatus
+import Amazonka.ComprehendMedical.Types.LanguageCode
+import Amazonka.ComprehendMedical.Types.OutputDataConfig
+import Amazonka.ComprehendMedical.Types.RelationshipType
+import Amazonka.ComprehendMedical.Types.RxNormAttribute
+import Amazonka.ComprehendMedical.Types.RxNormAttributeType
+import Amazonka.ComprehendMedical.Types.RxNormConcept
+import Amazonka.ComprehendMedical.Types.RxNormEntity
+import Amazonka.ComprehendMedical.Types.RxNormEntityCategory
+import Amazonka.ComprehendMedical.Types.RxNormEntityType
+import Amazonka.ComprehendMedical.Types.RxNormTrait
+import Amazonka.ComprehendMedical.Types.RxNormTraitName
+import Amazonka.ComprehendMedical.Types.SNOMEDCTAttribute
+import Amazonka.ComprehendMedical.Types.SNOMEDCTAttributeType
+import Amazonka.ComprehendMedical.Types.SNOMEDCTConcept
+import Amazonka.ComprehendMedical.Types.SNOMEDCTDetails
+import Amazonka.ComprehendMedical.Types.SNOMEDCTEntity
+import Amazonka.ComprehendMedical.Types.SNOMEDCTEntityCategory
+import Amazonka.ComprehendMedical.Types.SNOMEDCTEntityType
+import Amazonka.ComprehendMedical.Types.SNOMEDCTRelationshipType
+import Amazonka.ComprehendMedical.Types.SNOMEDCTTrait
+import Amazonka.ComprehendMedical.Types.SNOMEDCTTraitName
+import Amazonka.ComprehendMedical.Types.Trait
+import Amazonka.ComprehendMedical.Types.UnmappedAttribute
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-10-30@ of the Amazon Comprehend Medical SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ComprehendMedical",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "comprehendmedical",
+      Core.signingName = "comprehendmedical",
+      Core.version = "2018-10-30",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ComprehendMedical",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | An internal server error occurred. Retry your request.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+
+-- | The input text was not in valid UTF-8 character encoding. Check your
+-- text then retry your request.
+_InvalidEncodingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidEncodingException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidEncodingException"
+
+-- | The request that you made is invalid. Check your request to determine
+-- why it\'s invalid and then retry the request.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+
+-- | The resource identified by the specified Amazon Resource Name (ARN) was
+-- not found. Check the ARN and try your request again.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+
+-- | The Comprehend Medical; service is temporarily unavailable. Please wait
+-- and then retry your request.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+
+-- | The size of the text you submitted exceeds the size limit. Reduce the
+-- size of the text or use a smaller document and then retry your request.
+_TextSizeLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TextSizeLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "TextSizeLimitExceededException"
+
+-- | You have made too many requests within a short period of time. Wait for
+-- a short time and then try your request again. Contact customer support
+-- for more information about a service limit increase.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+
+-- | The filter that you specified for the operation is invalid. Check the
+-- filter values that you entered and try your request again.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
diff --git a/gen/Amazonka/ComprehendMedical/Types/Attribute.hs b/gen/Amazonka/ComprehendMedical/Types/Attribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/Attribute.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.Attribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.Attribute where
+
+import Amazonka.ComprehendMedical.Types.EntitySubType
+import Amazonka.ComprehendMedical.Types.EntityType
+import Amazonka.ComprehendMedical.Types.RelationshipType
+import Amazonka.ComprehendMedical.Types.Trait
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An extracted segment of the text that is an attribute of an entity, or
+-- otherwise related to an entity, such as the dosage of a medication
+-- taken. It contains information about the attribute such as id, begin and
+-- end offset within the input text, and the segment of the input text.
+--
+-- /See:/ 'newAttribute' smart constructor.
+data Attribute = Attribute'
+  { -- | The 0-based character offset in the input text that shows where the
+    -- attribute begins. The offset returns the UTF-8 code point in the string.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The category of attribute.
+    category :: Prelude.Maybe EntityType,
+    -- | The 0-based character offset in the input text that shows where the
+    -- attribute ends. The offset returns the UTF-8 code point in the string.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The numeric identifier for this attribute. This is a monotonically
+    -- increasing id unique within this response rather than a global unique
+    -- identifier.
+    id :: Prelude.Maybe Prelude.Int,
+    -- | The level of confidence that Comprehend Medical; has that this attribute
+    -- is correctly related to this entity.
+    relationshipScore :: Prelude.Maybe Prelude.Double,
+    -- | The type of relationship between the entity and attribute. Type for the
+    -- relationship is @OVERLAP@, indicating that the entity occurred at the
+    -- same time as the @Date_Expression@.
+    relationshipType :: Prelude.Maybe RelationshipType,
+    -- | The level of confidence that Comprehend Medical; has that the segment of
+    -- text is correctly recognized as an attribute.
+    score :: Prelude.Maybe Prelude.Double,
+    -- | The segment of input text extracted as this attribute.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | Contextual information for this attribute.
+    traits :: Prelude.Maybe [Trait],
+    -- | The type of attribute.
+    type' :: Prelude.Maybe EntitySubType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Attribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'beginOffset', 'attribute_beginOffset' - The 0-based character offset in the input text that shows where the
+-- attribute begins. The offset returns the UTF-8 code point in the string.
+--
+-- 'category', 'attribute_category' - The category of attribute.
+--
+-- 'endOffset', 'attribute_endOffset' - The 0-based character offset in the input text that shows where the
+-- attribute ends. The offset returns the UTF-8 code point in the string.
+--
+-- 'id', 'attribute_id' - The numeric identifier for this attribute. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+--
+-- 'relationshipScore', 'attribute_relationshipScore' - The level of confidence that Comprehend Medical; has that this attribute
+-- is correctly related to this entity.
+--
+-- 'relationshipType', 'attribute_relationshipType' - The type of relationship between the entity and attribute. Type for the
+-- relationship is @OVERLAP@, indicating that the entity occurred at the
+-- same time as the @Date_Expression@.
+--
+-- 'score', 'attribute_score' - The level of confidence that Comprehend Medical; has that the segment of
+-- text is correctly recognized as an attribute.
+--
+-- 'text', 'attribute_text' - The segment of input text extracted as this attribute.
+--
+-- 'traits', 'attribute_traits' - Contextual information for this attribute.
+--
+-- 'type'', 'attribute_type' - The type of attribute.
+newAttribute ::
+  Attribute
+newAttribute =
+  Attribute'
+    { beginOffset = Prelude.Nothing,
+      category = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      id = Prelude.Nothing,
+      relationshipScore = Prelude.Nothing,
+      relationshipType = Prelude.Nothing,
+      score = Prelude.Nothing,
+      text = Prelude.Nothing,
+      traits = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The 0-based character offset in the input text that shows where the
+-- attribute begins. The offset returns the UTF-8 code point in the string.
+attribute_beginOffset :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Int)
+attribute_beginOffset = Lens.lens (\Attribute' {beginOffset} -> beginOffset) (\s@Attribute' {} a -> s {beginOffset = a} :: Attribute)
+
+-- | The category of attribute.
+attribute_category :: Lens.Lens' Attribute (Prelude.Maybe EntityType)
+attribute_category = Lens.lens (\Attribute' {category} -> category) (\s@Attribute' {} a -> s {category = a} :: Attribute)
+
+-- | The 0-based character offset in the input text that shows where the
+-- attribute ends. The offset returns the UTF-8 code point in the string.
+attribute_endOffset :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Int)
+attribute_endOffset = Lens.lens (\Attribute' {endOffset} -> endOffset) (\s@Attribute' {} a -> s {endOffset = a} :: Attribute)
+
+-- | The numeric identifier for this attribute. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+attribute_id :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Int)
+attribute_id = Lens.lens (\Attribute' {id} -> id) (\s@Attribute' {} a -> s {id = a} :: Attribute)
+
+-- | The level of confidence that Comprehend Medical; has that this attribute
+-- is correctly related to this entity.
+attribute_relationshipScore :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Double)
+attribute_relationshipScore = Lens.lens (\Attribute' {relationshipScore} -> relationshipScore) (\s@Attribute' {} a -> s {relationshipScore = a} :: Attribute)
+
+-- | The type of relationship between the entity and attribute. Type for the
+-- relationship is @OVERLAP@, indicating that the entity occurred at the
+-- same time as the @Date_Expression@.
+attribute_relationshipType :: Lens.Lens' Attribute (Prelude.Maybe RelationshipType)
+attribute_relationshipType = Lens.lens (\Attribute' {relationshipType} -> relationshipType) (\s@Attribute' {} a -> s {relationshipType = a} :: Attribute)
+
+-- | The level of confidence that Comprehend Medical; has that the segment of
+-- text is correctly recognized as an attribute.
+attribute_score :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Double)
+attribute_score = Lens.lens (\Attribute' {score} -> score) (\s@Attribute' {} a -> s {score = a} :: Attribute)
+
+-- | The segment of input text extracted as this attribute.
+attribute_text :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Text)
+attribute_text = Lens.lens (\Attribute' {text} -> text) (\s@Attribute' {} a -> s {text = a} :: Attribute)
+
+-- | Contextual information for this attribute.
+attribute_traits :: Lens.Lens' Attribute (Prelude.Maybe [Trait])
+attribute_traits = Lens.lens (\Attribute' {traits} -> traits) (\s@Attribute' {} a -> s {traits = a} :: Attribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of attribute.
+attribute_type :: Lens.Lens' Attribute (Prelude.Maybe EntitySubType)
+attribute_type = Lens.lens (\Attribute' {type'} -> type') (\s@Attribute' {} a -> s {type' = a} :: Attribute)
+
+instance Data.FromJSON Attribute where
+  parseJSON =
+    Data.withObject
+      "Attribute"
+      ( \x ->
+          Attribute'
+            Prelude.<$> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "Category")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "RelationshipScore")
+            Prelude.<*> (x Data..:? "RelationshipType")
+            Prelude.<*> (x Data..:? "Score")
+            Prelude.<*> (x Data..:? "Text")
+            Prelude.<*> (x Data..:? "Traits" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable Attribute where
+  hashWithSalt _salt Attribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` relationshipScore
+      `Prelude.hashWithSalt` relationshipType
+      `Prelude.hashWithSalt` score
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` traits
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Attribute where
+  rnf Attribute' {..} =
+    Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf category
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf relationshipScore
+      `Prelude.seq` Prelude.rnf relationshipType
+      `Prelude.seq` Prelude.rnf score
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf traits
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Types/AttributeName.hs b/gen/Amazonka/ComprehendMedical/Types/AttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/AttributeName.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.AttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.AttributeName
+  ( AttributeName
+      ( ..,
+        AttributeName_DIAGNOSIS,
+        AttributeName_FUTURE,
+        AttributeName_HYPOTHETICAL,
+        AttributeName_LOW_CONFIDENCE,
+        AttributeName_NEGATION,
+        AttributeName_PAST_HISTORY,
+        AttributeName_PERTAINS_TO_FAMILY,
+        AttributeName_SIGN,
+        AttributeName_SYMPTOM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AttributeName = AttributeName'
+  { fromAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AttributeName_DIAGNOSIS :: AttributeName
+pattern AttributeName_DIAGNOSIS = AttributeName' "DIAGNOSIS"
+
+pattern AttributeName_FUTURE :: AttributeName
+pattern AttributeName_FUTURE = AttributeName' "FUTURE"
+
+pattern AttributeName_HYPOTHETICAL :: AttributeName
+pattern AttributeName_HYPOTHETICAL = AttributeName' "HYPOTHETICAL"
+
+pattern AttributeName_LOW_CONFIDENCE :: AttributeName
+pattern AttributeName_LOW_CONFIDENCE = AttributeName' "LOW_CONFIDENCE"
+
+pattern AttributeName_NEGATION :: AttributeName
+pattern AttributeName_NEGATION = AttributeName' "NEGATION"
+
+pattern AttributeName_PAST_HISTORY :: AttributeName
+pattern AttributeName_PAST_HISTORY = AttributeName' "PAST_HISTORY"
+
+pattern AttributeName_PERTAINS_TO_FAMILY :: AttributeName
+pattern AttributeName_PERTAINS_TO_FAMILY = AttributeName' "PERTAINS_TO_FAMILY"
+
+pattern AttributeName_SIGN :: AttributeName
+pattern AttributeName_SIGN = AttributeName' "SIGN"
+
+pattern AttributeName_SYMPTOM :: AttributeName
+pattern AttributeName_SYMPTOM = AttributeName' "SYMPTOM"
+
+{-# COMPLETE
+  AttributeName_DIAGNOSIS,
+  AttributeName_FUTURE,
+  AttributeName_HYPOTHETICAL,
+  AttributeName_LOW_CONFIDENCE,
+  AttributeName_NEGATION,
+  AttributeName_PAST_HISTORY,
+  AttributeName_PERTAINS_TO_FAMILY,
+  AttributeName_SIGN,
+  AttributeName_SYMPTOM,
+  AttributeName'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/Characters.hs b/gen/Amazonka/ComprehendMedical/Types/Characters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/Characters.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.Characters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.Characters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The number of characters in the input text to be analyzed.
+--
+-- /See:/ 'newCharacters' smart constructor.
+data Characters = Characters'
+  { -- | The number of characters present in the input text document as processed
+    -- by Comprehend Medical.
+    originalTextCharacters :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Characters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'originalTextCharacters', 'characters_originalTextCharacters' - The number of characters present in the input text document as processed
+-- by Comprehend Medical.
+newCharacters ::
+  Characters
+newCharacters =
+  Characters'
+    { originalTextCharacters =
+        Prelude.Nothing
+    }
+
+-- | The number of characters present in the input text document as processed
+-- by Comprehend Medical.
+characters_originalTextCharacters :: Lens.Lens' Characters (Prelude.Maybe Prelude.Int)
+characters_originalTextCharacters = Lens.lens (\Characters' {originalTextCharacters} -> originalTextCharacters) (\s@Characters' {} a -> s {originalTextCharacters = a} :: Characters)
+
+instance Data.FromJSON Characters where
+  parseJSON =
+    Data.withObject
+      "Characters"
+      ( \x ->
+          Characters'
+            Prelude.<$> (x Data..:? "OriginalTextCharacters")
+      )
+
+instance Prelude.Hashable Characters where
+  hashWithSalt _salt Characters' {..} =
+    _salt `Prelude.hashWithSalt` originalTextCharacters
+
+instance Prelude.NFData Characters where
+  rnf Characters' {..} =
+    Prelude.rnf originalTextCharacters
diff --git a/gen/Amazonka/ComprehendMedical/Types/ComprehendMedicalAsyncJobFilter.hs b/gen/Amazonka/ComprehendMedical/Types/ComprehendMedicalAsyncJobFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ComprehendMedicalAsyncJobFilter.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobFilter where
+
+import Amazonka.ComprehendMedical.Types.JobStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information for filtering a list of detection jobs.
+--
+-- /See:/ 'newComprehendMedicalAsyncJobFilter' smart constructor.
+data ComprehendMedicalAsyncJobFilter = ComprehendMedicalAsyncJobFilter'
+  { -- | Filters on the name of the job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | Filters the list of jobs based on job status. Returns only jobs with the
+    -- specified status.
+    jobStatus :: Prelude.Maybe JobStatus,
+    -- | Filters the list of jobs based on the time that the job was submitted
+    -- for processing. Returns only jobs submitted after the specified time.
+    -- Jobs are returned in descending order, newest to oldest.
+    submitTimeAfter :: Prelude.Maybe Data.POSIX,
+    -- | Filters the list of jobs based on the time that the job was submitted
+    -- for processing. Returns only jobs submitted before the specified time.
+    -- Jobs are returned in ascending order, oldest to newest.
+    submitTimeBefore :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComprehendMedicalAsyncJobFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobName', 'comprehendMedicalAsyncJobFilter_jobName' - Filters on the name of the job.
+--
+-- 'jobStatus', 'comprehendMedicalAsyncJobFilter_jobStatus' - Filters the list of jobs based on job status. Returns only jobs with the
+-- specified status.
+--
+-- 'submitTimeAfter', 'comprehendMedicalAsyncJobFilter_submitTimeAfter' - Filters the list of jobs based on the time that the job was submitted
+-- for processing. Returns only jobs submitted after the specified time.
+-- Jobs are returned in descending order, newest to oldest.
+--
+-- 'submitTimeBefore', 'comprehendMedicalAsyncJobFilter_submitTimeBefore' - Filters the list of jobs based on the time that the job was submitted
+-- for processing. Returns only jobs submitted before the specified time.
+-- Jobs are returned in ascending order, oldest to newest.
+newComprehendMedicalAsyncJobFilter ::
+  ComprehendMedicalAsyncJobFilter
+newComprehendMedicalAsyncJobFilter =
+  ComprehendMedicalAsyncJobFilter'
+    { jobName =
+        Prelude.Nothing,
+      jobStatus = Prelude.Nothing,
+      submitTimeAfter = Prelude.Nothing,
+      submitTimeBefore = Prelude.Nothing
+    }
+
+-- | Filters on the name of the job.
+comprehendMedicalAsyncJobFilter_jobName :: Lens.Lens' ComprehendMedicalAsyncJobFilter (Prelude.Maybe Prelude.Text)
+comprehendMedicalAsyncJobFilter_jobName = Lens.lens (\ComprehendMedicalAsyncJobFilter' {jobName} -> jobName) (\s@ComprehendMedicalAsyncJobFilter' {} a -> s {jobName = a} :: ComprehendMedicalAsyncJobFilter)
+
+-- | Filters the list of jobs based on job status. Returns only jobs with the
+-- specified status.
+comprehendMedicalAsyncJobFilter_jobStatus :: Lens.Lens' ComprehendMedicalAsyncJobFilter (Prelude.Maybe JobStatus)
+comprehendMedicalAsyncJobFilter_jobStatus = Lens.lens (\ComprehendMedicalAsyncJobFilter' {jobStatus} -> jobStatus) (\s@ComprehendMedicalAsyncJobFilter' {} a -> s {jobStatus = a} :: ComprehendMedicalAsyncJobFilter)
+
+-- | Filters the list of jobs based on the time that the job was submitted
+-- for processing. Returns only jobs submitted after the specified time.
+-- Jobs are returned in descending order, newest to oldest.
+comprehendMedicalAsyncJobFilter_submitTimeAfter :: Lens.Lens' ComprehendMedicalAsyncJobFilter (Prelude.Maybe Prelude.UTCTime)
+comprehendMedicalAsyncJobFilter_submitTimeAfter = Lens.lens (\ComprehendMedicalAsyncJobFilter' {submitTimeAfter} -> submitTimeAfter) (\s@ComprehendMedicalAsyncJobFilter' {} a -> s {submitTimeAfter = a} :: ComprehendMedicalAsyncJobFilter) Prelude.. Lens.mapping Data._Time
+
+-- | Filters the list of jobs based on the time that the job was submitted
+-- for processing. Returns only jobs submitted before the specified time.
+-- Jobs are returned in ascending order, oldest to newest.
+comprehendMedicalAsyncJobFilter_submitTimeBefore :: Lens.Lens' ComprehendMedicalAsyncJobFilter (Prelude.Maybe Prelude.UTCTime)
+comprehendMedicalAsyncJobFilter_submitTimeBefore = Lens.lens (\ComprehendMedicalAsyncJobFilter' {submitTimeBefore} -> submitTimeBefore) (\s@ComprehendMedicalAsyncJobFilter' {} a -> s {submitTimeBefore = a} :: ComprehendMedicalAsyncJobFilter) Prelude.. Lens.mapping Data._Time
+
+instance
+  Prelude.Hashable
+    ComprehendMedicalAsyncJobFilter
+  where
+  hashWithSalt
+    _salt
+    ComprehendMedicalAsyncJobFilter' {..} =
+      _salt
+        `Prelude.hashWithSalt` jobName
+        `Prelude.hashWithSalt` jobStatus
+        `Prelude.hashWithSalt` submitTimeAfter
+        `Prelude.hashWithSalt` submitTimeBefore
+
+instance
+  Prelude.NFData
+    ComprehendMedicalAsyncJobFilter
+  where
+  rnf ComprehendMedicalAsyncJobFilter' {..} =
+    Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf jobStatus
+      `Prelude.seq` Prelude.rnf submitTimeAfter
+      `Prelude.seq` Prelude.rnf submitTimeBefore
+
+instance Data.ToJSON ComprehendMedicalAsyncJobFilter where
+  toJSON ComprehendMedicalAsyncJobFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("JobName" Data..=) Prelude.<$> jobName,
+            ("JobStatus" Data..=) Prelude.<$> jobStatus,
+            ("SubmitTimeAfter" Data..=)
+              Prelude.<$> submitTimeAfter,
+            ("SubmitTimeBefore" Data..=)
+              Prelude.<$> submitTimeBefore
+          ]
+      )
diff --git a/gen/Amazonka/ComprehendMedical/Types/ComprehendMedicalAsyncJobProperties.hs b/gen/Amazonka/ComprehendMedical/Types/ComprehendMedicalAsyncJobProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ComprehendMedicalAsyncJobProperties.hs
@@ -0,0 +1,274 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ComprehendMedicalAsyncJobProperties where
+
+import Amazonka.ComprehendMedical.Types.InputDataConfig
+import Amazonka.ComprehendMedical.Types.JobStatus
+import Amazonka.ComprehendMedical.Types.LanguageCode
+import Amazonka.ComprehendMedical.Types.OutputDataConfig
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a detection job.
+--
+-- /See:/ 'newComprehendMedicalAsyncJobProperties' smart constructor.
+data ComprehendMedicalAsyncJobProperties = ComprehendMedicalAsyncJobProperties'
+  { -- | The Amazon Resource Name (ARN) that gives Comprehend Medical; read
+    -- access to your input data.
+    dataAccessRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The time that the detection job completed.
+    endTime :: Prelude.Maybe Data.POSIX,
+    -- | The date and time that job metadata is deleted from the server. Output
+    -- files in your S3 bucket will not be deleted. After the metadata is
+    -- deleted, the job will no longer appear in the results of the
+    -- @ListEntitiesDetectionV2Job@ or the @ListPHIDetectionJobs@ operation.
+    expirationTime :: Prelude.Maybe Data.POSIX,
+    -- | The input data configuration that you supplied when you created the
+    -- detection job.
+    inputDataConfig :: Prelude.Maybe InputDataConfig,
+    -- | The identifier assigned to the detection job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The name that you assigned to the detection job.
+    jobName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the detection job. If the status is @FAILED@, the
+    -- @Message@ field shows the reason for the failure.
+    jobStatus :: Prelude.Maybe JobStatus,
+    -- | The AWS Key Management Service key, if any, used to encrypt the output
+    -- files.
+    kmsKey :: Prelude.Maybe Prelude.Text,
+    -- | The language code of the input documents.
+    languageCode :: Prelude.Maybe LanguageCode,
+    -- | The path to the file that describes the results of a batch job.
+    manifestFilePath :: Prelude.Maybe Prelude.Text,
+    -- | A description of the status of a job.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The version of the model used to analyze the documents. The version
+    -- number looks like X.X.X. You can use this information to track the model
+    -- used for a particular batch of documents.
+    modelVersion :: Prelude.Maybe Prelude.Text,
+    -- | The output data configuration that you supplied when you created the
+    -- detection job.
+    outputDataConfig :: Prelude.Maybe OutputDataConfig,
+    -- | The time that the detection job was submitted for processing.
+    submitTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComprehendMedicalAsyncJobProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataAccessRoleArn', 'comprehendMedicalAsyncJobProperties_dataAccessRoleArn' - The Amazon Resource Name (ARN) that gives Comprehend Medical; read
+-- access to your input data.
+--
+-- 'endTime', 'comprehendMedicalAsyncJobProperties_endTime' - The time that the detection job completed.
+--
+-- 'expirationTime', 'comprehendMedicalAsyncJobProperties_expirationTime' - The date and time that job metadata is deleted from the server. Output
+-- files in your S3 bucket will not be deleted. After the metadata is
+-- deleted, the job will no longer appear in the results of the
+-- @ListEntitiesDetectionV2Job@ or the @ListPHIDetectionJobs@ operation.
+--
+-- 'inputDataConfig', 'comprehendMedicalAsyncJobProperties_inputDataConfig' - The input data configuration that you supplied when you created the
+-- detection job.
+--
+-- 'jobId', 'comprehendMedicalAsyncJobProperties_jobId' - The identifier assigned to the detection job.
+--
+-- 'jobName', 'comprehendMedicalAsyncJobProperties_jobName' - The name that you assigned to the detection job.
+--
+-- 'jobStatus', 'comprehendMedicalAsyncJobProperties_jobStatus' - The current status of the detection job. If the status is @FAILED@, the
+-- @Message@ field shows the reason for the failure.
+--
+-- 'kmsKey', 'comprehendMedicalAsyncJobProperties_kmsKey' - The AWS Key Management Service key, if any, used to encrypt the output
+-- files.
+--
+-- 'languageCode', 'comprehendMedicalAsyncJobProperties_languageCode' - The language code of the input documents.
+--
+-- 'manifestFilePath', 'comprehendMedicalAsyncJobProperties_manifestFilePath' - The path to the file that describes the results of a batch job.
+--
+-- 'message', 'comprehendMedicalAsyncJobProperties_message' - A description of the status of a job.
+--
+-- 'modelVersion', 'comprehendMedicalAsyncJobProperties_modelVersion' - The version of the model used to analyze the documents. The version
+-- number looks like X.X.X. You can use this information to track the model
+-- used for a particular batch of documents.
+--
+-- 'outputDataConfig', 'comprehendMedicalAsyncJobProperties_outputDataConfig' - The output data configuration that you supplied when you created the
+-- detection job.
+--
+-- 'submitTime', 'comprehendMedicalAsyncJobProperties_submitTime' - The time that the detection job was submitted for processing.
+newComprehendMedicalAsyncJobProperties ::
+  ComprehendMedicalAsyncJobProperties
+newComprehendMedicalAsyncJobProperties =
+  ComprehendMedicalAsyncJobProperties'
+    { dataAccessRoleArn =
+        Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      expirationTime = Prelude.Nothing,
+      inputDataConfig = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobName = Prelude.Nothing,
+      jobStatus = Prelude.Nothing,
+      kmsKey = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      manifestFilePath = Prelude.Nothing,
+      message = Prelude.Nothing,
+      modelVersion = Prelude.Nothing,
+      outputDataConfig = Prelude.Nothing,
+      submitTime = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) that gives Comprehend Medical; read
+-- access to your input data.
+comprehendMedicalAsyncJobProperties_dataAccessRoleArn :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.Text)
+comprehendMedicalAsyncJobProperties_dataAccessRoleArn = Lens.lens (\ComprehendMedicalAsyncJobProperties' {dataAccessRoleArn} -> dataAccessRoleArn) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {dataAccessRoleArn = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The time that the detection job completed.
+comprehendMedicalAsyncJobProperties_endTime :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.UTCTime)
+comprehendMedicalAsyncJobProperties_endTime = Lens.lens (\ComprehendMedicalAsyncJobProperties' {endTime} -> endTime) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {endTime = a} :: ComprehendMedicalAsyncJobProperties) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time that job metadata is deleted from the server. Output
+-- files in your S3 bucket will not be deleted. After the metadata is
+-- deleted, the job will no longer appear in the results of the
+-- @ListEntitiesDetectionV2Job@ or the @ListPHIDetectionJobs@ operation.
+comprehendMedicalAsyncJobProperties_expirationTime :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.UTCTime)
+comprehendMedicalAsyncJobProperties_expirationTime = Lens.lens (\ComprehendMedicalAsyncJobProperties' {expirationTime} -> expirationTime) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {expirationTime = a} :: ComprehendMedicalAsyncJobProperties) Prelude.. Lens.mapping Data._Time
+
+-- | The input data configuration that you supplied when you created the
+-- detection job.
+comprehendMedicalAsyncJobProperties_inputDataConfig :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe InputDataConfig)
+comprehendMedicalAsyncJobProperties_inputDataConfig = Lens.lens (\ComprehendMedicalAsyncJobProperties' {inputDataConfig} -> inputDataConfig) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {inputDataConfig = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The identifier assigned to the detection job.
+comprehendMedicalAsyncJobProperties_jobId :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.Text)
+comprehendMedicalAsyncJobProperties_jobId = Lens.lens (\ComprehendMedicalAsyncJobProperties' {jobId} -> jobId) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {jobId = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The name that you assigned to the detection job.
+comprehendMedicalAsyncJobProperties_jobName :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.Text)
+comprehendMedicalAsyncJobProperties_jobName = Lens.lens (\ComprehendMedicalAsyncJobProperties' {jobName} -> jobName) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {jobName = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The current status of the detection job. If the status is @FAILED@, the
+-- @Message@ field shows the reason for the failure.
+comprehendMedicalAsyncJobProperties_jobStatus :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe JobStatus)
+comprehendMedicalAsyncJobProperties_jobStatus = Lens.lens (\ComprehendMedicalAsyncJobProperties' {jobStatus} -> jobStatus) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {jobStatus = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The AWS Key Management Service key, if any, used to encrypt the output
+-- files.
+comprehendMedicalAsyncJobProperties_kmsKey :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.Text)
+comprehendMedicalAsyncJobProperties_kmsKey = Lens.lens (\ComprehendMedicalAsyncJobProperties' {kmsKey} -> kmsKey) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {kmsKey = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The language code of the input documents.
+comprehendMedicalAsyncJobProperties_languageCode :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe LanguageCode)
+comprehendMedicalAsyncJobProperties_languageCode = Lens.lens (\ComprehendMedicalAsyncJobProperties' {languageCode} -> languageCode) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {languageCode = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The path to the file that describes the results of a batch job.
+comprehendMedicalAsyncJobProperties_manifestFilePath :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.Text)
+comprehendMedicalAsyncJobProperties_manifestFilePath = Lens.lens (\ComprehendMedicalAsyncJobProperties' {manifestFilePath} -> manifestFilePath) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {manifestFilePath = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | A description of the status of a job.
+comprehendMedicalAsyncJobProperties_message :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.Text)
+comprehendMedicalAsyncJobProperties_message = Lens.lens (\ComprehendMedicalAsyncJobProperties' {message} -> message) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {message = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The version of the model used to analyze the documents. The version
+-- number looks like X.X.X. You can use this information to track the model
+-- used for a particular batch of documents.
+comprehendMedicalAsyncJobProperties_modelVersion :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.Text)
+comprehendMedicalAsyncJobProperties_modelVersion = Lens.lens (\ComprehendMedicalAsyncJobProperties' {modelVersion} -> modelVersion) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {modelVersion = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The output data configuration that you supplied when you created the
+-- detection job.
+comprehendMedicalAsyncJobProperties_outputDataConfig :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe OutputDataConfig)
+comprehendMedicalAsyncJobProperties_outputDataConfig = Lens.lens (\ComprehendMedicalAsyncJobProperties' {outputDataConfig} -> outputDataConfig) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {outputDataConfig = a} :: ComprehendMedicalAsyncJobProperties)
+
+-- | The time that the detection job was submitted for processing.
+comprehendMedicalAsyncJobProperties_submitTime :: Lens.Lens' ComprehendMedicalAsyncJobProperties (Prelude.Maybe Prelude.UTCTime)
+comprehendMedicalAsyncJobProperties_submitTime = Lens.lens (\ComprehendMedicalAsyncJobProperties' {submitTime} -> submitTime) (\s@ComprehendMedicalAsyncJobProperties' {} a -> s {submitTime = a} :: ComprehendMedicalAsyncJobProperties) Prelude.. Lens.mapping Data._Time
+
+instance
+  Data.FromJSON
+    ComprehendMedicalAsyncJobProperties
+  where
+  parseJSON =
+    Data.withObject
+      "ComprehendMedicalAsyncJobProperties"
+      ( \x ->
+          ComprehendMedicalAsyncJobProperties'
+            Prelude.<$> (x Data..:? "DataAccessRoleArn")
+            Prelude.<*> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..:? "ExpirationTime")
+            Prelude.<*> (x Data..:? "InputDataConfig")
+            Prelude.<*> (x Data..:? "JobId")
+            Prelude.<*> (x Data..:? "JobName")
+            Prelude.<*> (x Data..:? "JobStatus")
+            Prelude.<*> (x Data..:? "KMSKey")
+            Prelude.<*> (x Data..:? "LanguageCode")
+            Prelude.<*> (x Data..:? "ManifestFilePath")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "ModelVersion")
+            Prelude.<*> (x Data..:? "OutputDataConfig")
+            Prelude.<*> (x Data..:? "SubmitTime")
+      )
+
+instance
+  Prelude.Hashable
+    ComprehendMedicalAsyncJobProperties
+  where
+  hashWithSalt
+    _salt
+    ComprehendMedicalAsyncJobProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` dataAccessRoleArn
+        `Prelude.hashWithSalt` endTime
+        `Prelude.hashWithSalt` expirationTime
+        `Prelude.hashWithSalt` inputDataConfig
+        `Prelude.hashWithSalt` jobId
+        `Prelude.hashWithSalt` jobName
+        `Prelude.hashWithSalt` jobStatus
+        `Prelude.hashWithSalt` kmsKey
+        `Prelude.hashWithSalt` languageCode
+        `Prelude.hashWithSalt` manifestFilePath
+        `Prelude.hashWithSalt` message
+        `Prelude.hashWithSalt` modelVersion
+        `Prelude.hashWithSalt` outputDataConfig
+        `Prelude.hashWithSalt` submitTime
+
+instance
+  Prelude.NFData
+    ComprehendMedicalAsyncJobProperties
+  where
+  rnf ComprehendMedicalAsyncJobProperties' {..} =
+    Prelude.rnf dataAccessRoleArn
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf expirationTime
+      `Prelude.seq` Prelude.rnf inputDataConfig
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobName
+      `Prelude.seq` Prelude.rnf jobStatus
+      `Prelude.seq` Prelude.rnf kmsKey
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf manifestFilePath
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf modelVersion
+      `Prelude.seq` Prelude.rnf outputDataConfig
+      `Prelude.seq` Prelude.rnf submitTime
diff --git a/gen/Amazonka/ComprehendMedical/Types/Entity.hs b/gen/Amazonka/ComprehendMedical/Types/Entity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/Entity.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.Entity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.Entity where
+
+import Amazonka.ComprehendMedical.Types.Attribute
+import Amazonka.ComprehendMedical.Types.EntitySubType
+import Amazonka.ComprehendMedical.Types.EntityType
+import Amazonka.ComprehendMedical.Types.Trait
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about an extracted medical entity.
+--
+-- /See:/ 'newEntity' smart constructor.
+data Entity = Entity'
+  { -- | The extracted attributes that relate to this entity.
+    attributes :: Prelude.Maybe [Attribute],
+    -- | The 0-based character offset in the input text that shows where the
+    -- entity begins. The offset returns the UTF-8 code point in the string.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The category of the entity.
+    category :: Prelude.Maybe EntityType,
+    -- | The 0-based character offset in the input text that shows where the
+    -- entity ends. The offset returns the UTF-8 code point in the string.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The numeric identifier for the entity. This is a monotonically
+    -- increasing id unique within this response rather than a global unique
+    -- identifier.
+    id :: Prelude.Maybe Prelude.Int,
+    -- | The level of confidence that Comprehend Medical; has in the accuracy of
+    -- the detection.
+    score :: Prelude.Maybe Prelude.Double,
+    -- | The segment of input text extracted as this entity.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | Contextual information for the entity.
+    traits :: Prelude.Maybe [Trait],
+    -- | Describes the specific type of entity with category of entities.
+    type' :: Prelude.Maybe EntitySubType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Entity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'entity_attributes' - The extracted attributes that relate to this entity.
+--
+-- 'beginOffset', 'entity_beginOffset' - The 0-based character offset in the input text that shows where the
+-- entity begins. The offset returns the UTF-8 code point in the string.
+--
+-- 'category', 'entity_category' - The category of the entity.
+--
+-- 'endOffset', 'entity_endOffset' - The 0-based character offset in the input text that shows where the
+-- entity ends. The offset returns the UTF-8 code point in the string.
+--
+-- 'id', 'entity_id' - The numeric identifier for the entity. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+--
+-- 'score', 'entity_score' - The level of confidence that Comprehend Medical; has in the accuracy of
+-- the detection.
+--
+-- 'text', 'entity_text' - The segment of input text extracted as this entity.
+--
+-- 'traits', 'entity_traits' - Contextual information for the entity.
+--
+-- 'type'', 'entity_type' - Describes the specific type of entity with category of entities.
+newEntity ::
+  Entity
+newEntity =
+  Entity'
+    { attributes = Prelude.Nothing,
+      beginOffset = Prelude.Nothing,
+      category = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      id = Prelude.Nothing,
+      score = Prelude.Nothing,
+      text = Prelude.Nothing,
+      traits = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The extracted attributes that relate to this entity.
+entity_attributes :: Lens.Lens' Entity (Prelude.Maybe [Attribute])
+entity_attributes = Lens.lens (\Entity' {attributes} -> attributes) (\s@Entity' {} a -> s {attributes = a} :: Entity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The 0-based character offset in the input text that shows where the
+-- entity begins. The offset returns the UTF-8 code point in the string.
+entity_beginOffset :: Lens.Lens' Entity (Prelude.Maybe Prelude.Int)
+entity_beginOffset = Lens.lens (\Entity' {beginOffset} -> beginOffset) (\s@Entity' {} a -> s {beginOffset = a} :: Entity)
+
+-- | The category of the entity.
+entity_category :: Lens.Lens' Entity (Prelude.Maybe EntityType)
+entity_category = Lens.lens (\Entity' {category} -> category) (\s@Entity' {} a -> s {category = a} :: Entity)
+
+-- | The 0-based character offset in the input text that shows where the
+-- entity ends. The offset returns the UTF-8 code point in the string.
+entity_endOffset :: Lens.Lens' Entity (Prelude.Maybe Prelude.Int)
+entity_endOffset = Lens.lens (\Entity' {endOffset} -> endOffset) (\s@Entity' {} a -> s {endOffset = a} :: Entity)
+
+-- | The numeric identifier for the entity. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+entity_id :: Lens.Lens' Entity (Prelude.Maybe Prelude.Int)
+entity_id = Lens.lens (\Entity' {id} -> id) (\s@Entity' {} a -> s {id = a} :: Entity)
+
+-- | The level of confidence that Comprehend Medical; has in the accuracy of
+-- the detection.
+entity_score :: Lens.Lens' Entity (Prelude.Maybe Prelude.Double)
+entity_score = Lens.lens (\Entity' {score} -> score) (\s@Entity' {} a -> s {score = a} :: Entity)
+
+-- | The segment of input text extracted as this entity.
+entity_text :: Lens.Lens' Entity (Prelude.Maybe Prelude.Text)
+entity_text = Lens.lens (\Entity' {text} -> text) (\s@Entity' {} a -> s {text = a} :: Entity)
+
+-- | Contextual information for the entity.
+entity_traits :: Lens.Lens' Entity (Prelude.Maybe [Trait])
+entity_traits = Lens.lens (\Entity' {traits} -> traits) (\s@Entity' {} a -> s {traits = a} :: Entity) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the specific type of entity with category of entities.
+entity_type :: Lens.Lens' Entity (Prelude.Maybe EntitySubType)
+entity_type = Lens.lens (\Entity' {type'} -> type') (\s@Entity' {} a -> s {type' = a} :: Entity)
+
+instance Data.FromJSON Entity where
+  parseJSON =
+    Data.withObject
+      "Entity"
+      ( \x ->
+          Entity'
+            Prelude.<$> (x Data..:? "Attributes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "Category")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Score")
+            Prelude.<*> (x Data..:? "Text")
+            Prelude.<*> (x Data..:? "Traits" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable Entity where
+  hashWithSalt _salt Entity' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` score
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` traits
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Entity where
+  rnf Entity' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf category
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf score
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf traits
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Types/EntitySubType.hs b/gen/Amazonka/ComprehendMedical/Types/EntitySubType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/EntitySubType.hs
@@ -0,0 +1,286 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.EntitySubType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.EntitySubType
+  ( EntitySubType
+      ( ..,
+        EntitySubType_ACUITY,
+        EntitySubType_ADDRESS,
+        EntitySubType_AGE,
+        EntitySubType_ALCOHOL_CONSUMPTION,
+        EntitySubType_ALLERGIES,
+        EntitySubType_AMOUNT,
+        EntitySubType_BRAND_NAME,
+        EntitySubType_CONTACT_POINT,
+        EntitySubType_DATE,
+        EntitySubType_DIRECTION,
+        EntitySubType_DOSAGE,
+        EntitySubType_DURATION,
+        EntitySubType_DX_NAME,
+        EntitySubType_EMAIL,
+        EntitySubType_FORM,
+        EntitySubType_FREQUENCY,
+        EntitySubType_GENDER,
+        EntitySubType_GENERIC_NAME,
+        EntitySubType_ID,
+        EntitySubType_IDENTIFIER,
+        EntitySubType_NAME,
+        EntitySubType_PHONE_OR_FAX,
+        EntitySubType_PROCEDURE_NAME,
+        EntitySubType_PROFESSION,
+        EntitySubType_QUALITY,
+        EntitySubType_QUANTITY,
+        EntitySubType_RACE_ETHNICITY,
+        EntitySubType_RATE,
+        EntitySubType_REC_DRUG_USE,
+        EntitySubType_ROUTE_OR_MODE,
+        EntitySubType_STRENGTH,
+        EntitySubType_SYSTEM_ORGAN_SITE,
+        EntitySubType_TEST_NAME,
+        EntitySubType_TEST_UNIT,
+        EntitySubType_TEST_UNITS,
+        EntitySubType_TEST_VALUE,
+        EntitySubType_TIME_EXPRESSION,
+        EntitySubType_TIME_TO_DX_NAME,
+        EntitySubType_TIME_TO_MEDICATION_NAME,
+        EntitySubType_TIME_TO_PROCEDURE_NAME,
+        EntitySubType_TIME_TO_TEST_NAME,
+        EntitySubType_TIME_TO_TREATMENT_NAME,
+        EntitySubType_TOBACCO_USE,
+        EntitySubType_TREATMENT_NAME,
+        EntitySubType_URL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EntitySubType = EntitySubType'
+  { fromEntitySubType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EntitySubType_ACUITY :: EntitySubType
+pattern EntitySubType_ACUITY = EntitySubType' "ACUITY"
+
+pattern EntitySubType_ADDRESS :: EntitySubType
+pattern EntitySubType_ADDRESS = EntitySubType' "ADDRESS"
+
+pattern EntitySubType_AGE :: EntitySubType
+pattern EntitySubType_AGE = EntitySubType' "AGE"
+
+pattern EntitySubType_ALCOHOL_CONSUMPTION :: EntitySubType
+pattern EntitySubType_ALCOHOL_CONSUMPTION = EntitySubType' "ALCOHOL_CONSUMPTION"
+
+pattern EntitySubType_ALLERGIES :: EntitySubType
+pattern EntitySubType_ALLERGIES = EntitySubType' "ALLERGIES"
+
+pattern EntitySubType_AMOUNT :: EntitySubType
+pattern EntitySubType_AMOUNT = EntitySubType' "AMOUNT"
+
+pattern EntitySubType_BRAND_NAME :: EntitySubType
+pattern EntitySubType_BRAND_NAME = EntitySubType' "BRAND_NAME"
+
+pattern EntitySubType_CONTACT_POINT :: EntitySubType
+pattern EntitySubType_CONTACT_POINT = EntitySubType' "CONTACT_POINT"
+
+pattern EntitySubType_DATE :: EntitySubType
+pattern EntitySubType_DATE = EntitySubType' "DATE"
+
+pattern EntitySubType_DIRECTION :: EntitySubType
+pattern EntitySubType_DIRECTION = EntitySubType' "DIRECTION"
+
+pattern EntitySubType_DOSAGE :: EntitySubType
+pattern EntitySubType_DOSAGE = EntitySubType' "DOSAGE"
+
+pattern EntitySubType_DURATION :: EntitySubType
+pattern EntitySubType_DURATION = EntitySubType' "DURATION"
+
+pattern EntitySubType_DX_NAME :: EntitySubType
+pattern EntitySubType_DX_NAME = EntitySubType' "DX_NAME"
+
+pattern EntitySubType_EMAIL :: EntitySubType
+pattern EntitySubType_EMAIL = EntitySubType' "EMAIL"
+
+pattern EntitySubType_FORM :: EntitySubType
+pattern EntitySubType_FORM = EntitySubType' "FORM"
+
+pattern EntitySubType_FREQUENCY :: EntitySubType
+pattern EntitySubType_FREQUENCY = EntitySubType' "FREQUENCY"
+
+pattern EntitySubType_GENDER :: EntitySubType
+pattern EntitySubType_GENDER = EntitySubType' "GENDER"
+
+pattern EntitySubType_GENERIC_NAME :: EntitySubType
+pattern EntitySubType_GENERIC_NAME = EntitySubType' "GENERIC_NAME"
+
+pattern EntitySubType_ID :: EntitySubType
+pattern EntitySubType_ID = EntitySubType' "ID"
+
+pattern EntitySubType_IDENTIFIER :: EntitySubType
+pattern EntitySubType_IDENTIFIER = EntitySubType' "IDENTIFIER"
+
+pattern EntitySubType_NAME :: EntitySubType
+pattern EntitySubType_NAME = EntitySubType' "NAME"
+
+pattern EntitySubType_PHONE_OR_FAX :: EntitySubType
+pattern EntitySubType_PHONE_OR_FAX = EntitySubType' "PHONE_OR_FAX"
+
+pattern EntitySubType_PROCEDURE_NAME :: EntitySubType
+pattern EntitySubType_PROCEDURE_NAME = EntitySubType' "PROCEDURE_NAME"
+
+pattern EntitySubType_PROFESSION :: EntitySubType
+pattern EntitySubType_PROFESSION = EntitySubType' "PROFESSION"
+
+pattern EntitySubType_QUALITY :: EntitySubType
+pattern EntitySubType_QUALITY = EntitySubType' "QUALITY"
+
+pattern EntitySubType_QUANTITY :: EntitySubType
+pattern EntitySubType_QUANTITY = EntitySubType' "QUANTITY"
+
+pattern EntitySubType_RACE_ETHNICITY :: EntitySubType
+pattern EntitySubType_RACE_ETHNICITY = EntitySubType' "RACE_ETHNICITY"
+
+pattern EntitySubType_RATE :: EntitySubType
+pattern EntitySubType_RATE = EntitySubType' "RATE"
+
+pattern EntitySubType_REC_DRUG_USE :: EntitySubType
+pattern EntitySubType_REC_DRUG_USE = EntitySubType' "REC_DRUG_USE"
+
+pattern EntitySubType_ROUTE_OR_MODE :: EntitySubType
+pattern EntitySubType_ROUTE_OR_MODE = EntitySubType' "ROUTE_OR_MODE"
+
+pattern EntitySubType_STRENGTH :: EntitySubType
+pattern EntitySubType_STRENGTH = EntitySubType' "STRENGTH"
+
+pattern EntitySubType_SYSTEM_ORGAN_SITE :: EntitySubType
+pattern EntitySubType_SYSTEM_ORGAN_SITE = EntitySubType' "SYSTEM_ORGAN_SITE"
+
+pattern EntitySubType_TEST_NAME :: EntitySubType
+pattern EntitySubType_TEST_NAME = EntitySubType' "TEST_NAME"
+
+pattern EntitySubType_TEST_UNIT :: EntitySubType
+pattern EntitySubType_TEST_UNIT = EntitySubType' "TEST_UNIT"
+
+pattern EntitySubType_TEST_UNITS :: EntitySubType
+pattern EntitySubType_TEST_UNITS = EntitySubType' "TEST_UNITS"
+
+pattern EntitySubType_TEST_VALUE :: EntitySubType
+pattern EntitySubType_TEST_VALUE = EntitySubType' "TEST_VALUE"
+
+pattern EntitySubType_TIME_EXPRESSION :: EntitySubType
+pattern EntitySubType_TIME_EXPRESSION = EntitySubType' "TIME_EXPRESSION"
+
+pattern EntitySubType_TIME_TO_DX_NAME :: EntitySubType
+pattern EntitySubType_TIME_TO_DX_NAME = EntitySubType' "TIME_TO_DX_NAME"
+
+pattern EntitySubType_TIME_TO_MEDICATION_NAME :: EntitySubType
+pattern EntitySubType_TIME_TO_MEDICATION_NAME = EntitySubType' "TIME_TO_MEDICATION_NAME"
+
+pattern EntitySubType_TIME_TO_PROCEDURE_NAME :: EntitySubType
+pattern EntitySubType_TIME_TO_PROCEDURE_NAME = EntitySubType' "TIME_TO_PROCEDURE_NAME"
+
+pattern EntitySubType_TIME_TO_TEST_NAME :: EntitySubType
+pattern EntitySubType_TIME_TO_TEST_NAME = EntitySubType' "TIME_TO_TEST_NAME"
+
+pattern EntitySubType_TIME_TO_TREATMENT_NAME :: EntitySubType
+pattern EntitySubType_TIME_TO_TREATMENT_NAME = EntitySubType' "TIME_TO_TREATMENT_NAME"
+
+pattern EntitySubType_TOBACCO_USE :: EntitySubType
+pattern EntitySubType_TOBACCO_USE = EntitySubType' "TOBACCO_USE"
+
+pattern EntitySubType_TREATMENT_NAME :: EntitySubType
+pattern EntitySubType_TREATMENT_NAME = EntitySubType' "TREATMENT_NAME"
+
+pattern EntitySubType_URL :: EntitySubType
+pattern EntitySubType_URL = EntitySubType' "URL"
+
+{-# COMPLETE
+  EntitySubType_ACUITY,
+  EntitySubType_ADDRESS,
+  EntitySubType_AGE,
+  EntitySubType_ALCOHOL_CONSUMPTION,
+  EntitySubType_ALLERGIES,
+  EntitySubType_AMOUNT,
+  EntitySubType_BRAND_NAME,
+  EntitySubType_CONTACT_POINT,
+  EntitySubType_DATE,
+  EntitySubType_DIRECTION,
+  EntitySubType_DOSAGE,
+  EntitySubType_DURATION,
+  EntitySubType_DX_NAME,
+  EntitySubType_EMAIL,
+  EntitySubType_FORM,
+  EntitySubType_FREQUENCY,
+  EntitySubType_GENDER,
+  EntitySubType_GENERIC_NAME,
+  EntitySubType_ID,
+  EntitySubType_IDENTIFIER,
+  EntitySubType_NAME,
+  EntitySubType_PHONE_OR_FAX,
+  EntitySubType_PROCEDURE_NAME,
+  EntitySubType_PROFESSION,
+  EntitySubType_QUALITY,
+  EntitySubType_QUANTITY,
+  EntitySubType_RACE_ETHNICITY,
+  EntitySubType_RATE,
+  EntitySubType_REC_DRUG_USE,
+  EntitySubType_ROUTE_OR_MODE,
+  EntitySubType_STRENGTH,
+  EntitySubType_SYSTEM_ORGAN_SITE,
+  EntitySubType_TEST_NAME,
+  EntitySubType_TEST_UNIT,
+  EntitySubType_TEST_UNITS,
+  EntitySubType_TEST_VALUE,
+  EntitySubType_TIME_EXPRESSION,
+  EntitySubType_TIME_TO_DX_NAME,
+  EntitySubType_TIME_TO_MEDICATION_NAME,
+  EntitySubType_TIME_TO_PROCEDURE_NAME,
+  EntitySubType_TIME_TO_TEST_NAME,
+  EntitySubType_TIME_TO_TREATMENT_NAME,
+  EntitySubType_TOBACCO_USE,
+  EntitySubType_TREATMENT_NAME,
+  EntitySubType_URL,
+  EntitySubType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/EntityType.hs b/gen/Amazonka/ComprehendMedical/Types/EntityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/EntityType.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.EntityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.EntityType
+  ( EntityType
+      ( ..,
+        EntityType_ANATOMY,
+        EntityType_BEHAVIORAL_ENVIRONMENTAL_SOCIAL,
+        EntityType_MEDICAL_CONDITION,
+        EntityType_MEDICATION,
+        EntityType_PROTECTED_HEALTH_INFORMATION,
+        EntityType_TEST_TREATMENT_PROCEDURE,
+        EntityType_TIME_EXPRESSION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EntityType = EntityType'
+  { fromEntityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EntityType_ANATOMY :: EntityType
+pattern EntityType_ANATOMY = EntityType' "ANATOMY"
+
+pattern EntityType_BEHAVIORAL_ENVIRONMENTAL_SOCIAL :: EntityType
+pattern EntityType_BEHAVIORAL_ENVIRONMENTAL_SOCIAL = EntityType' "BEHAVIORAL_ENVIRONMENTAL_SOCIAL"
+
+pattern EntityType_MEDICAL_CONDITION :: EntityType
+pattern EntityType_MEDICAL_CONDITION = EntityType' "MEDICAL_CONDITION"
+
+pattern EntityType_MEDICATION :: EntityType
+pattern EntityType_MEDICATION = EntityType' "MEDICATION"
+
+pattern EntityType_PROTECTED_HEALTH_INFORMATION :: EntityType
+pattern EntityType_PROTECTED_HEALTH_INFORMATION = EntityType' "PROTECTED_HEALTH_INFORMATION"
+
+pattern EntityType_TEST_TREATMENT_PROCEDURE :: EntityType
+pattern EntityType_TEST_TREATMENT_PROCEDURE = EntityType' "TEST_TREATMENT_PROCEDURE"
+
+pattern EntityType_TIME_EXPRESSION :: EntityType
+pattern EntityType_TIME_EXPRESSION = EntityType' "TIME_EXPRESSION"
+
+{-# COMPLETE
+  EntityType_ANATOMY,
+  EntityType_BEHAVIORAL_ENVIRONMENTAL_SOCIAL,
+  EntityType_MEDICAL_CONDITION,
+  EntityType_MEDICATION,
+  EntityType_PROTECTED_HEALTH_INFORMATION,
+  EntityType_TEST_TREATMENT_PROCEDURE,
+  EntityType_TIME_EXPRESSION,
+  EntityType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMAttribute.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMAttribute.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMAttribute where
+
+import Amazonka.ComprehendMedical.Types.ICD10CMAttributeType
+import Amazonka.ComprehendMedical.Types.ICD10CMEntityType
+import Amazonka.ComprehendMedical.Types.ICD10CMRelationshipType
+import Amazonka.ComprehendMedical.Types.ICD10CMTrait
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The detected attributes that relate to an entity. This includes an
+-- extracted segment of the text that is an attribute of an entity, or
+-- otherwise related to an entity. InferICD10CM detects the following
+-- attributes: @Direction@, @System, Organ or Site@, and @Acuity@.
+--
+-- /See:/ 'newICD10CMAttribute' smart constructor.
+data ICD10CMAttribute = ICD10CMAttribute'
+  { -- | The 0-based character offset in the input text that shows where the
+    -- attribute begins. The offset returns the UTF-8 code point in the string.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The category of attribute. Can be either of @DX_NAME@ or
+    -- @TIME_EXPRESSION@.
+    category :: Prelude.Maybe ICD10CMEntityType,
+    -- | The 0-based character offset in the input text that shows where the
+    -- attribute ends. The offset returns the UTF-8 code point in the string.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The numeric identifier for this attribute. This is a monotonically
+    -- increasing id unique within this response rather than a global unique
+    -- identifier.
+    id :: Prelude.Maybe Prelude.Int,
+    -- | The level of confidence that Amazon Comprehend Medical has that this
+    -- attribute is correctly related to this entity.
+    relationshipScore :: Prelude.Maybe Prelude.Double,
+    -- | The type of relationship between the entity and attribute. Type for the
+    -- relationship can be either of @OVERLAP@ or @SYSTEM_ORGAN_SITE@.
+    relationshipType :: Prelude.Maybe ICD10CMRelationshipType,
+    -- | The level of confidence that Amazon Comprehend Medical has that the
+    -- segment of text is correctly recognized as an attribute.
+    score :: Prelude.Maybe Prelude.Double,
+    -- | The segment of input text which contains the detected attribute.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | The contextual information for the attribute. The traits recognized by
+    -- InferICD10CM are @DIAGNOSIS@, @SIGN@, @SYMPTOM@, and @NEGATION@.
+    traits :: Prelude.Maybe [ICD10CMTrait],
+    -- | The type of attribute. InferICD10CM detects entities of the type
+    -- @DX_NAME@.
+    type' :: Prelude.Maybe ICD10CMAttributeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ICD10CMAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'beginOffset', 'iCD10CMAttribute_beginOffset' - The 0-based character offset in the input text that shows where the
+-- attribute begins. The offset returns the UTF-8 code point in the string.
+--
+-- 'category', 'iCD10CMAttribute_category' - The category of attribute. Can be either of @DX_NAME@ or
+-- @TIME_EXPRESSION@.
+--
+-- 'endOffset', 'iCD10CMAttribute_endOffset' - The 0-based character offset in the input text that shows where the
+-- attribute ends. The offset returns the UTF-8 code point in the string.
+--
+-- 'id', 'iCD10CMAttribute_id' - The numeric identifier for this attribute. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+--
+-- 'relationshipScore', 'iCD10CMAttribute_relationshipScore' - The level of confidence that Amazon Comprehend Medical has that this
+-- attribute is correctly related to this entity.
+--
+-- 'relationshipType', 'iCD10CMAttribute_relationshipType' - The type of relationship between the entity and attribute. Type for the
+-- relationship can be either of @OVERLAP@ or @SYSTEM_ORGAN_SITE@.
+--
+-- 'score', 'iCD10CMAttribute_score' - The level of confidence that Amazon Comprehend Medical has that the
+-- segment of text is correctly recognized as an attribute.
+--
+-- 'text', 'iCD10CMAttribute_text' - The segment of input text which contains the detected attribute.
+--
+-- 'traits', 'iCD10CMAttribute_traits' - The contextual information for the attribute. The traits recognized by
+-- InferICD10CM are @DIAGNOSIS@, @SIGN@, @SYMPTOM@, and @NEGATION@.
+--
+-- 'type'', 'iCD10CMAttribute_type' - The type of attribute. InferICD10CM detects entities of the type
+-- @DX_NAME@.
+newICD10CMAttribute ::
+  ICD10CMAttribute
+newICD10CMAttribute =
+  ICD10CMAttribute'
+    { beginOffset = Prelude.Nothing,
+      category = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      id = Prelude.Nothing,
+      relationshipScore = Prelude.Nothing,
+      relationshipType = Prelude.Nothing,
+      score = Prelude.Nothing,
+      text = Prelude.Nothing,
+      traits = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The 0-based character offset in the input text that shows where the
+-- attribute begins. The offset returns the UTF-8 code point in the string.
+iCD10CMAttribute_beginOffset :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe Prelude.Int)
+iCD10CMAttribute_beginOffset = Lens.lens (\ICD10CMAttribute' {beginOffset} -> beginOffset) (\s@ICD10CMAttribute' {} a -> s {beginOffset = a} :: ICD10CMAttribute)
+
+-- | The category of attribute. Can be either of @DX_NAME@ or
+-- @TIME_EXPRESSION@.
+iCD10CMAttribute_category :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe ICD10CMEntityType)
+iCD10CMAttribute_category = Lens.lens (\ICD10CMAttribute' {category} -> category) (\s@ICD10CMAttribute' {} a -> s {category = a} :: ICD10CMAttribute)
+
+-- | The 0-based character offset in the input text that shows where the
+-- attribute ends. The offset returns the UTF-8 code point in the string.
+iCD10CMAttribute_endOffset :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe Prelude.Int)
+iCD10CMAttribute_endOffset = Lens.lens (\ICD10CMAttribute' {endOffset} -> endOffset) (\s@ICD10CMAttribute' {} a -> s {endOffset = a} :: ICD10CMAttribute)
+
+-- | The numeric identifier for this attribute. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+iCD10CMAttribute_id :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe Prelude.Int)
+iCD10CMAttribute_id = Lens.lens (\ICD10CMAttribute' {id} -> id) (\s@ICD10CMAttribute' {} a -> s {id = a} :: ICD10CMAttribute)
+
+-- | The level of confidence that Amazon Comprehend Medical has that this
+-- attribute is correctly related to this entity.
+iCD10CMAttribute_relationshipScore :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe Prelude.Double)
+iCD10CMAttribute_relationshipScore = Lens.lens (\ICD10CMAttribute' {relationshipScore} -> relationshipScore) (\s@ICD10CMAttribute' {} a -> s {relationshipScore = a} :: ICD10CMAttribute)
+
+-- | The type of relationship between the entity and attribute. Type for the
+-- relationship can be either of @OVERLAP@ or @SYSTEM_ORGAN_SITE@.
+iCD10CMAttribute_relationshipType :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe ICD10CMRelationshipType)
+iCD10CMAttribute_relationshipType = Lens.lens (\ICD10CMAttribute' {relationshipType} -> relationshipType) (\s@ICD10CMAttribute' {} a -> s {relationshipType = a} :: ICD10CMAttribute)
+
+-- | The level of confidence that Amazon Comprehend Medical has that the
+-- segment of text is correctly recognized as an attribute.
+iCD10CMAttribute_score :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe Prelude.Double)
+iCD10CMAttribute_score = Lens.lens (\ICD10CMAttribute' {score} -> score) (\s@ICD10CMAttribute' {} a -> s {score = a} :: ICD10CMAttribute)
+
+-- | The segment of input text which contains the detected attribute.
+iCD10CMAttribute_text :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe Prelude.Text)
+iCD10CMAttribute_text = Lens.lens (\ICD10CMAttribute' {text} -> text) (\s@ICD10CMAttribute' {} a -> s {text = a} :: ICD10CMAttribute)
+
+-- | The contextual information for the attribute. The traits recognized by
+-- InferICD10CM are @DIAGNOSIS@, @SIGN@, @SYMPTOM@, and @NEGATION@.
+iCD10CMAttribute_traits :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe [ICD10CMTrait])
+iCD10CMAttribute_traits = Lens.lens (\ICD10CMAttribute' {traits} -> traits) (\s@ICD10CMAttribute' {} a -> s {traits = a} :: ICD10CMAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of attribute. InferICD10CM detects entities of the type
+-- @DX_NAME@.
+iCD10CMAttribute_type :: Lens.Lens' ICD10CMAttribute (Prelude.Maybe ICD10CMAttributeType)
+iCD10CMAttribute_type = Lens.lens (\ICD10CMAttribute' {type'} -> type') (\s@ICD10CMAttribute' {} a -> s {type' = a} :: ICD10CMAttribute)
+
+instance Data.FromJSON ICD10CMAttribute where
+  parseJSON =
+    Data.withObject
+      "ICD10CMAttribute"
+      ( \x ->
+          ICD10CMAttribute'
+            Prelude.<$> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "Category")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "RelationshipScore")
+            Prelude.<*> (x Data..:? "RelationshipType")
+            Prelude.<*> (x Data..:? "Score")
+            Prelude.<*> (x Data..:? "Text")
+            Prelude.<*> (x Data..:? "Traits" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable ICD10CMAttribute where
+  hashWithSalt _salt ICD10CMAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` relationshipScore
+      `Prelude.hashWithSalt` relationshipType
+      `Prelude.hashWithSalt` score
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` traits
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ICD10CMAttribute where
+  rnf ICD10CMAttribute' {..} =
+    Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf category
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf relationshipScore
+      `Prelude.seq` Prelude.rnf relationshipType
+      `Prelude.seq` Prelude.rnf score
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf traits
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMAttributeType.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMAttributeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMAttributeType.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMAttributeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMAttributeType
+  ( ICD10CMAttributeType
+      ( ..,
+        ICD10CMAttributeType_ACUITY,
+        ICD10CMAttributeType_DIRECTION,
+        ICD10CMAttributeType_QUALITY,
+        ICD10CMAttributeType_QUANTITY,
+        ICD10CMAttributeType_SYSTEM_ORGAN_SITE,
+        ICD10CMAttributeType_TIME_EXPRESSION,
+        ICD10CMAttributeType_TIME_TO_DX_NAME
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ICD10CMAttributeType = ICD10CMAttributeType'
+  { fromICD10CMAttributeType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ICD10CMAttributeType_ACUITY :: ICD10CMAttributeType
+pattern ICD10CMAttributeType_ACUITY = ICD10CMAttributeType' "ACUITY"
+
+pattern ICD10CMAttributeType_DIRECTION :: ICD10CMAttributeType
+pattern ICD10CMAttributeType_DIRECTION = ICD10CMAttributeType' "DIRECTION"
+
+pattern ICD10CMAttributeType_QUALITY :: ICD10CMAttributeType
+pattern ICD10CMAttributeType_QUALITY = ICD10CMAttributeType' "QUALITY"
+
+pattern ICD10CMAttributeType_QUANTITY :: ICD10CMAttributeType
+pattern ICD10CMAttributeType_QUANTITY = ICD10CMAttributeType' "QUANTITY"
+
+pattern ICD10CMAttributeType_SYSTEM_ORGAN_SITE :: ICD10CMAttributeType
+pattern ICD10CMAttributeType_SYSTEM_ORGAN_SITE = ICD10CMAttributeType' "SYSTEM_ORGAN_SITE"
+
+pattern ICD10CMAttributeType_TIME_EXPRESSION :: ICD10CMAttributeType
+pattern ICD10CMAttributeType_TIME_EXPRESSION = ICD10CMAttributeType' "TIME_EXPRESSION"
+
+pattern ICD10CMAttributeType_TIME_TO_DX_NAME :: ICD10CMAttributeType
+pattern ICD10CMAttributeType_TIME_TO_DX_NAME = ICD10CMAttributeType' "TIME_TO_DX_NAME"
+
+{-# COMPLETE
+  ICD10CMAttributeType_ACUITY,
+  ICD10CMAttributeType_DIRECTION,
+  ICD10CMAttributeType_QUALITY,
+  ICD10CMAttributeType_QUANTITY,
+  ICD10CMAttributeType_SYSTEM_ORGAN_SITE,
+  ICD10CMAttributeType_TIME_EXPRESSION,
+  ICD10CMAttributeType_TIME_TO_DX_NAME,
+  ICD10CMAttributeType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMConcept.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMConcept.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMConcept.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMConcept
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMConcept where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The ICD-10-CM concepts that the entity could refer to, along with a
+-- score indicating the likelihood of the match.
+--
+-- /See:/ 'newICD10CMConcept' smart constructor.
+data ICD10CMConcept = ICD10CMConcept'
+  { -- | The ICD-10-CM code that identifies the concept found in the knowledge
+    -- base from the Centers for Disease Control.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The long description of the ICD-10-CM code in the ontology.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The level of confidence that Amazon Comprehend Medical has that the
+    -- entity is accurately linked to an ICD-10-CM concept.
+    score :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ICD10CMConcept' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'iCD10CMConcept_code' - The ICD-10-CM code that identifies the concept found in the knowledge
+-- base from the Centers for Disease Control.
+--
+-- 'description', 'iCD10CMConcept_description' - The long description of the ICD-10-CM code in the ontology.
+--
+-- 'score', 'iCD10CMConcept_score' - The level of confidence that Amazon Comprehend Medical has that the
+-- entity is accurately linked to an ICD-10-CM concept.
+newICD10CMConcept ::
+  ICD10CMConcept
+newICD10CMConcept =
+  ICD10CMConcept'
+    { code = Prelude.Nothing,
+      description = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | The ICD-10-CM code that identifies the concept found in the knowledge
+-- base from the Centers for Disease Control.
+iCD10CMConcept_code :: Lens.Lens' ICD10CMConcept (Prelude.Maybe Prelude.Text)
+iCD10CMConcept_code = Lens.lens (\ICD10CMConcept' {code} -> code) (\s@ICD10CMConcept' {} a -> s {code = a} :: ICD10CMConcept)
+
+-- | The long description of the ICD-10-CM code in the ontology.
+iCD10CMConcept_description :: Lens.Lens' ICD10CMConcept (Prelude.Maybe Prelude.Text)
+iCD10CMConcept_description = Lens.lens (\ICD10CMConcept' {description} -> description) (\s@ICD10CMConcept' {} a -> s {description = a} :: ICD10CMConcept)
+
+-- | The level of confidence that Amazon Comprehend Medical has that the
+-- entity is accurately linked to an ICD-10-CM concept.
+iCD10CMConcept_score :: Lens.Lens' ICD10CMConcept (Prelude.Maybe Prelude.Double)
+iCD10CMConcept_score = Lens.lens (\ICD10CMConcept' {score} -> score) (\s@ICD10CMConcept' {} a -> s {score = a} :: ICD10CMConcept)
+
+instance Data.FromJSON ICD10CMConcept where
+  parseJSON =
+    Data.withObject
+      "ICD10CMConcept"
+      ( \x ->
+          ICD10CMConcept'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Score")
+      )
+
+instance Prelude.Hashable ICD10CMConcept where
+  hashWithSalt _salt ICD10CMConcept' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData ICD10CMConcept where
+  rnf ICD10CMConcept' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntity.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntity.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMEntity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMEntity where
+
+import Amazonka.ComprehendMedical.Types.ICD10CMAttribute
+import Amazonka.ComprehendMedical.Types.ICD10CMConcept
+import Amazonka.ComprehendMedical.Types.ICD10CMEntityCategory
+import Amazonka.ComprehendMedical.Types.ICD10CMEntityType
+import Amazonka.ComprehendMedical.Types.ICD10CMTrait
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The collection of medical entities extracted from the input text and
+-- their associated information. For each entity, the response provides the
+-- entity text, the entity category, where the entity text begins and ends,
+-- and the level of confidence that Amazon Comprehend Medical has in the
+-- detection and analysis. Attributes and traits of the entity are also
+-- returned.
+--
+-- /See:/ 'newICD10CMEntity' smart constructor.
+data ICD10CMEntity = ICD10CMEntity'
+  { -- | The detected attributes that relate to the entity. An extracted segment
+    -- of the text that is an attribute of an entity, or otherwise related to
+    -- an entity, such as the nature of a medical condition.
+    attributes :: Prelude.Maybe [ICD10CMAttribute],
+    -- | The 0-based character offset in the input text that shows where the
+    -- entity begins. The offset returns the UTF-8 code point in the string.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The category of the entity. InferICD10CM detects entities in the
+    -- @MEDICAL_CONDITION@ category.
+    category :: Prelude.Maybe ICD10CMEntityCategory,
+    -- | The 0-based character offset in the input text that shows where the
+    -- entity ends. The offset returns the UTF-8 code point in the string.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The ICD-10-CM concepts that the entity could refer to, along with a
+    -- score indicating the likelihood of the match.
+    iCD10CMConcepts :: Prelude.Maybe [ICD10CMConcept],
+    -- | The numeric identifier for the entity. This is a monotonically
+    -- increasing id unique within this response rather than a global unique
+    -- identifier.
+    id :: Prelude.Maybe Prelude.Int,
+    -- | The level of confidence that Amazon Comprehend Medical has in the
+    -- accuracy of the detection.
+    score :: Prelude.Maybe Prelude.Double,
+    -- | The segment of input text that is matched to the detected entity.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | Provides Contextual information for the entity. The traits recognized by
+    -- InferICD10CM are @DIAGNOSIS@, @SIGN@, @SYMPTOM@, and @NEGATION.@
+    traits :: Prelude.Maybe [ICD10CMTrait],
+    -- | Describes the specific type of entity with category of entities.
+    -- InferICD10CM detects entities of the type @DX_NAME@ and
+    -- @TIME_EXPRESSION@.
+    type' :: Prelude.Maybe ICD10CMEntityType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ICD10CMEntity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'iCD10CMEntity_attributes' - The detected attributes that relate to the entity. An extracted segment
+-- of the text that is an attribute of an entity, or otherwise related to
+-- an entity, such as the nature of a medical condition.
+--
+-- 'beginOffset', 'iCD10CMEntity_beginOffset' - The 0-based character offset in the input text that shows where the
+-- entity begins. The offset returns the UTF-8 code point in the string.
+--
+-- 'category', 'iCD10CMEntity_category' - The category of the entity. InferICD10CM detects entities in the
+-- @MEDICAL_CONDITION@ category.
+--
+-- 'endOffset', 'iCD10CMEntity_endOffset' - The 0-based character offset in the input text that shows where the
+-- entity ends. The offset returns the UTF-8 code point in the string.
+--
+-- 'iCD10CMConcepts', 'iCD10CMEntity_iCD10CMConcepts' - The ICD-10-CM concepts that the entity could refer to, along with a
+-- score indicating the likelihood of the match.
+--
+-- 'id', 'iCD10CMEntity_id' - The numeric identifier for the entity. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+--
+-- 'score', 'iCD10CMEntity_score' - The level of confidence that Amazon Comprehend Medical has in the
+-- accuracy of the detection.
+--
+-- 'text', 'iCD10CMEntity_text' - The segment of input text that is matched to the detected entity.
+--
+-- 'traits', 'iCD10CMEntity_traits' - Provides Contextual information for the entity. The traits recognized by
+-- InferICD10CM are @DIAGNOSIS@, @SIGN@, @SYMPTOM@, and @NEGATION.@
+--
+-- 'type'', 'iCD10CMEntity_type' - Describes the specific type of entity with category of entities.
+-- InferICD10CM detects entities of the type @DX_NAME@ and
+-- @TIME_EXPRESSION@.
+newICD10CMEntity ::
+  ICD10CMEntity
+newICD10CMEntity =
+  ICD10CMEntity'
+    { attributes = Prelude.Nothing,
+      beginOffset = Prelude.Nothing,
+      category = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      iCD10CMConcepts = Prelude.Nothing,
+      id = Prelude.Nothing,
+      score = Prelude.Nothing,
+      text = Prelude.Nothing,
+      traits = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The detected attributes that relate to the entity. An extracted segment
+-- of the text that is an attribute of an entity, or otherwise related to
+-- an entity, such as the nature of a medical condition.
+iCD10CMEntity_attributes :: Lens.Lens' ICD10CMEntity (Prelude.Maybe [ICD10CMAttribute])
+iCD10CMEntity_attributes = Lens.lens (\ICD10CMEntity' {attributes} -> attributes) (\s@ICD10CMEntity' {} a -> s {attributes = a} :: ICD10CMEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The 0-based character offset in the input text that shows where the
+-- entity begins. The offset returns the UTF-8 code point in the string.
+iCD10CMEntity_beginOffset :: Lens.Lens' ICD10CMEntity (Prelude.Maybe Prelude.Int)
+iCD10CMEntity_beginOffset = Lens.lens (\ICD10CMEntity' {beginOffset} -> beginOffset) (\s@ICD10CMEntity' {} a -> s {beginOffset = a} :: ICD10CMEntity)
+
+-- | The category of the entity. InferICD10CM detects entities in the
+-- @MEDICAL_CONDITION@ category.
+iCD10CMEntity_category :: Lens.Lens' ICD10CMEntity (Prelude.Maybe ICD10CMEntityCategory)
+iCD10CMEntity_category = Lens.lens (\ICD10CMEntity' {category} -> category) (\s@ICD10CMEntity' {} a -> s {category = a} :: ICD10CMEntity)
+
+-- | The 0-based character offset in the input text that shows where the
+-- entity ends. The offset returns the UTF-8 code point in the string.
+iCD10CMEntity_endOffset :: Lens.Lens' ICD10CMEntity (Prelude.Maybe Prelude.Int)
+iCD10CMEntity_endOffset = Lens.lens (\ICD10CMEntity' {endOffset} -> endOffset) (\s@ICD10CMEntity' {} a -> s {endOffset = a} :: ICD10CMEntity)
+
+-- | The ICD-10-CM concepts that the entity could refer to, along with a
+-- score indicating the likelihood of the match.
+iCD10CMEntity_iCD10CMConcepts :: Lens.Lens' ICD10CMEntity (Prelude.Maybe [ICD10CMConcept])
+iCD10CMEntity_iCD10CMConcepts = Lens.lens (\ICD10CMEntity' {iCD10CMConcepts} -> iCD10CMConcepts) (\s@ICD10CMEntity' {} a -> s {iCD10CMConcepts = a} :: ICD10CMEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The numeric identifier for the entity. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+iCD10CMEntity_id :: Lens.Lens' ICD10CMEntity (Prelude.Maybe Prelude.Int)
+iCD10CMEntity_id = Lens.lens (\ICD10CMEntity' {id} -> id) (\s@ICD10CMEntity' {} a -> s {id = a} :: ICD10CMEntity)
+
+-- | The level of confidence that Amazon Comprehend Medical has in the
+-- accuracy of the detection.
+iCD10CMEntity_score :: Lens.Lens' ICD10CMEntity (Prelude.Maybe Prelude.Double)
+iCD10CMEntity_score = Lens.lens (\ICD10CMEntity' {score} -> score) (\s@ICD10CMEntity' {} a -> s {score = a} :: ICD10CMEntity)
+
+-- | The segment of input text that is matched to the detected entity.
+iCD10CMEntity_text :: Lens.Lens' ICD10CMEntity (Prelude.Maybe Prelude.Text)
+iCD10CMEntity_text = Lens.lens (\ICD10CMEntity' {text} -> text) (\s@ICD10CMEntity' {} a -> s {text = a} :: ICD10CMEntity)
+
+-- | Provides Contextual information for the entity. The traits recognized by
+-- InferICD10CM are @DIAGNOSIS@, @SIGN@, @SYMPTOM@, and @NEGATION.@
+iCD10CMEntity_traits :: Lens.Lens' ICD10CMEntity (Prelude.Maybe [ICD10CMTrait])
+iCD10CMEntity_traits = Lens.lens (\ICD10CMEntity' {traits} -> traits) (\s@ICD10CMEntity' {} a -> s {traits = a} :: ICD10CMEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the specific type of entity with category of entities.
+-- InferICD10CM detects entities of the type @DX_NAME@ and
+-- @TIME_EXPRESSION@.
+iCD10CMEntity_type :: Lens.Lens' ICD10CMEntity (Prelude.Maybe ICD10CMEntityType)
+iCD10CMEntity_type = Lens.lens (\ICD10CMEntity' {type'} -> type') (\s@ICD10CMEntity' {} a -> s {type' = a} :: ICD10CMEntity)
+
+instance Data.FromJSON ICD10CMEntity where
+  parseJSON =
+    Data.withObject
+      "ICD10CMEntity"
+      ( \x ->
+          ICD10CMEntity'
+            Prelude.<$> (x Data..:? "Attributes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "Category")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> ( x
+                            Data..:? "ICD10CMConcepts"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Score")
+            Prelude.<*> (x Data..:? "Text")
+            Prelude.<*> (x Data..:? "Traits" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable ICD10CMEntity where
+  hashWithSalt _salt ICD10CMEntity' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` iCD10CMConcepts
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` score
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` traits
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ICD10CMEntity where
+  rnf ICD10CMEntity' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf category
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf iCD10CMConcepts
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf score
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf traits
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntityCategory.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntityCategory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntityCategory.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMEntityCategory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMEntityCategory
+  ( ICD10CMEntityCategory
+      ( ..,
+        ICD10CMEntityCategory_MEDICAL_CONDITION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ICD10CMEntityCategory = ICD10CMEntityCategory'
+  { fromICD10CMEntityCategory ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ICD10CMEntityCategory_MEDICAL_CONDITION :: ICD10CMEntityCategory
+pattern ICD10CMEntityCategory_MEDICAL_CONDITION = ICD10CMEntityCategory' "MEDICAL_CONDITION"
+
+{-# COMPLETE
+  ICD10CMEntityCategory_MEDICAL_CONDITION,
+  ICD10CMEntityCategory'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntityType.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMEntityType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMEntityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMEntityType
+  ( ICD10CMEntityType
+      ( ..,
+        ICD10CMEntityType_DX_NAME,
+        ICD10CMEntityType_TIME_EXPRESSION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ICD10CMEntityType = ICD10CMEntityType'
+  { fromICD10CMEntityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ICD10CMEntityType_DX_NAME :: ICD10CMEntityType
+pattern ICD10CMEntityType_DX_NAME = ICD10CMEntityType' "DX_NAME"
+
+pattern ICD10CMEntityType_TIME_EXPRESSION :: ICD10CMEntityType
+pattern ICD10CMEntityType_TIME_EXPRESSION = ICD10CMEntityType' "TIME_EXPRESSION"
+
+{-# COMPLETE
+  ICD10CMEntityType_DX_NAME,
+  ICD10CMEntityType_TIME_EXPRESSION,
+  ICD10CMEntityType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMRelationshipType.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMRelationshipType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMRelationshipType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMRelationshipType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMRelationshipType
+  ( ICD10CMRelationshipType
+      ( ..,
+        ICD10CMRelationshipType_OVERLAP,
+        ICD10CMRelationshipType_SYSTEM_ORGAN_SITE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ICD10CMRelationshipType = ICD10CMRelationshipType'
+  { fromICD10CMRelationshipType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ICD10CMRelationshipType_OVERLAP :: ICD10CMRelationshipType
+pattern ICD10CMRelationshipType_OVERLAP = ICD10CMRelationshipType' "OVERLAP"
+
+pattern ICD10CMRelationshipType_SYSTEM_ORGAN_SITE :: ICD10CMRelationshipType
+pattern ICD10CMRelationshipType_SYSTEM_ORGAN_SITE = ICD10CMRelationshipType' "SYSTEM_ORGAN_SITE"
+
+{-# COMPLETE
+  ICD10CMRelationshipType_OVERLAP,
+  ICD10CMRelationshipType_SYSTEM_ORGAN_SITE,
+  ICD10CMRelationshipType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMTrait.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMTrait.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMTrait.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMTrait
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMTrait where
+
+import Amazonka.ComprehendMedical.Types.ICD10CMTraitName
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contextual information for the entity. The traits recognized by
+-- InferICD10CM are @DIAGNOSIS@, @SIGN@, @SYMPTOM@, and @NEGATION@.
+--
+-- /See:/ 'newICD10CMTrait' smart constructor.
+data ICD10CMTrait = ICD10CMTrait'
+  { -- | Provides a name or contextual description about the trait.
+    name :: Prelude.Maybe ICD10CMTraitName,
+    -- | The level of confidence that Comprehend Medical; has that the segment of
+    -- text is correctly recognized as a trait.
+    score :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ICD10CMTrait' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'iCD10CMTrait_name' - Provides a name or contextual description about the trait.
+--
+-- 'score', 'iCD10CMTrait_score' - The level of confidence that Comprehend Medical; has that the segment of
+-- text is correctly recognized as a trait.
+newICD10CMTrait ::
+  ICD10CMTrait
+newICD10CMTrait =
+  ICD10CMTrait'
+    { name = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | Provides a name or contextual description about the trait.
+iCD10CMTrait_name :: Lens.Lens' ICD10CMTrait (Prelude.Maybe ICD10CMTraitName)
+iCD10CMTrait_name = Lens.lens (\ICD10CMTrait' {name} -> name) (\s@ICD10CMTrait' {} a -> s {name = a} :: ICD10CMTrait)
+
+-- | The level of confidence that Comprehend Medical; has that the segment of
+-- text is correctly recognized as a trait.
+iCD10CMTrait_score :: Lens.Lens' ICD10CMTrait (Prelude.Maybe Prelude.Double)
+iCD10CMTrait_score = Lens.lens (\ICD10CMTrait' {score} -> score) (\s@ICD10CMTrait' {} a -> s {score = a} :: ICD10CMTrait)
+
+instance Data.FromJSON ICD10CMTrait where
+  parseJSON =
+    Data.withObject
+      "ICD10CMTrait"
+      ( \x ->
+          ICD10CMTrait'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Score")
+      )
+
+instance Prelude.Hashable ICD10CMTrait where
+  hashWithSalt _salt ICD10CMTrait' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData ICD10CMTrait where
+  rnf ICD10CMTrait' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/ComprehendMedical/Types/ICD10CMTraitName.hs b/gen/Amazonka/ComprehendMedical/Types/ICD10CMTraitName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/ICD10CMTraitName.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.ICD10CMTraitName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.ICD10CMTraitName
+  ( ICD10CMTraitName
+      ( ..,
+        ICD10CMTraitName_DIAGNOSIS,
+        ICD10CMTraitName_HYPOTHETICAL,
+        ICD10CMTraitName_LOW_CONFIDENCE,
+        ICD10CMTraitName_NEGATION,
+        ICD10CMTraitName_PERTAINS_TO_FAMILY,
+        ICD10CMTraitName_SIGN,
+        ICD10CMTraitName_SYMPTOM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ICD10CMTraitName = ICD10CMTraitName'
+  { fromICD10CMTraitName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ICD10CMTraitName_DIAGNOSIS :: ICD10CMTraitName
+pattern ICD10CMTraitName_DIAGNOSIS = ICD10CMTraitName' "DIAGNOSIS"
+
+pattern ICD10CMTraitName_HYPOTHETICAL :: ICD10CMTraitName
+pattern ICD10CMTraitName_HYPOTHETICAL = ICD10CMTraitName' "HYPOTHETICAL"
+
+pattern ICD10CMTraitName_LOW_CONFIDENCE :: ICD10CMTraitName
+pattern ICD10CMTraitName_LOW_CONFIDENCE = ICD10CMTraitName' "LOW_CONFIDENCE"
+
+pattern ICD10CMTraitName_NEGATION :: ICD10CMTraitName
+pattern ICD10CMTraitName_NEGATION = ICD10CMTraitName' "NEGATION"
+
+pattern ICD10CMTraitName_PERTAINS_TO_FAMILY :: ICD10CMTraitName
+pattern ICD10CMTraitName_PERTAINS_TO_FAMILY = ICD10CMTraitName' "PERTAINS_TO_FAMILY"
+
+pattern ICD10CMTraitName_SIGN :: ICD10CMTraitName
+pattern ICD10CMTraitName_SIGN = ICD10CMTraitName' "SIGN"
+
+pattern ICD10CMTraitName_SYMPTOM :: ICD10CMTraitName
+pattern ICD10CMTraitName_SYMPTOM = ICD10CMTraitName' "SYMPTOM"
+
+{-# COMPLETE
+  ICD10CMTraitName_DIAGNOSIS,
+  ICD10CMTraitName_HYPOTHETICAL,
+  ICD10CMTraitName_LOW_CONFIDENCE,
+  ICD10CMTraitName_NEGATION,
+  ICD10CMTraitName_PERTAINS_TO_FAMILY,
+  ICD10CMTraitName_SIGN,
+  ICD10CMTraitName_SYMPTOM,
+  ICD10CMTraitName'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/InputDataConfig.hs b/gen/Amazonka/ComprehendMedical/Types/InputDataConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/InputDataConfig.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.InputDataConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.InputDataConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The input properties for an entities detection job. This includes the
+-- name of the S3 bucket and the path to the files to be analyzed.
+--
+-- /See:/ 'newInputDataConfig' smart constructor.
+data InputDataConfig = InputDataConfig'
+  { -- | The path to the input data files in the S3 bucket.
+    s3Key :: Prelude.Maybe Prelude.Text,
+    -- | The URI of the S3 bucket that contains the input data. The bucket must
+    -- be in the same region as the API endpoint that you are calling.
+    --
+    -- Each file in the document collection must be less than 40 KB. You can
+    -- store a maximum of 30 GB in the bucket.
+    s3Bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputDataConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Key', 'inputDataConfig_s3Key' - The path to the input data files in the S3 bucket.
+--
+-- 's3Bucket', 'inputDataConfig_s3Bucket' - The URI of the S3 bucket that contains the input data. The bucket must
+-- be in the same region as the API endpoint that you are calling.
+--
+-- Each file in the document collection must be less than 40 KB. You can
+-- store a maximum of 30 GB in the bucket.
+newInputDataConfig ::
+  -- | 's3Bucket'
+  Prelude.Text ->
+  InputDataConfig
+newInputDataConfig pS3Bucket_ =
+  InputDataConfig'
+    { s3Key = Prelude.Nothing,
+      s3Bucket = pS3Bucket_
+    }
+
+-- | The path to the input data files in the S3 bucket.
+inputDataConfig_s3Key :: Lens.Lens' InputDataConfig (Prelude.Maybe Prelude.Text)
+inputDataConfig_s3Key = Lens.lens (\InputDataConfig' {s3Key} -> s3Key) (\s@InputDataConfig' {} a -> s {s3Key = a} :: InputDataConfig)
+
+-- | The URI of the S3 bucket that contains the input data. The bucket must
+-- be in the same region as the API endpoint that you are calling.
+--
+-- Each file in the document collection must be less than 40 KB. You can
+-- store a maximum of 30 GB in the bucket.
+inputDataConfig_s3Bucket :: Lens.Lens' InputDataConfig Prelude.Text
+inputDataConfig_s3Bucket = Lens.lens (\InputDataConfig' {s3Bucket} -> s3Bucket) (\s@InputDataConfig' {} a -> s {s3Bucket = a} :: InputDataConfig)
+
+instance Data.FromJSON InputDataConfig where
+  parseJSON =
+    Data.withObject
+      "InputDataConfig"
+      ( \x ->
+          InputDataConfig'
+            Prelude.<$> (x Data..:? "S3Key")
+            Prelude.<*> (x Data..: "S3Bucket")
+      )
+
+instance Prelude.Hashable InputDataConfig where
+  hashWithSalt _salt InputDataConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Key
+      `Prelude.hashWithSalt` s3Bucket
+
+instance Prelude.NFData InputDataConfig where
+  rnf InputDataConfig' {..} =
+    Prelude.rnf s3Key
+      `Prelude.seq` Prelude.rnf s3Bucket
+
+instance Data.ToJSON InputDataConfig where
+  toJSON InputDataConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("S3Key" Data..=) Prelude.<$> s3Key,
+            Prelude.Just ("S3Bucket" Data..= s3Bucket)
+          ]
+      )
diff --git a/gen/Amazonka/ComprehendMedical/Types/JobStatus.hs b/gen/Amazonka/ComprehendMedical/Types/JobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/JobStatus.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.JobStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.JobStatus
+  ( JobStatus
+      ( ..,
+        JobStatus_COMPLETED,
+        JobStatus_FAILED,
+        JobStatus_IN_PROGRESS,
+        JobStatus_PARTIAL_SUCCESS,
+        JobStatus_STOPPED,
+        JobStatus_STOP_REQUESTED,
+        JobStatus_SUBMITTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobStatus = JobStatus'
+  { fromJobStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern JobStatus_COMPLETED :: JobStatus
+pattern JobStatus_COMPLETED = JobStatus' "COMPLETED"
+
+pattern JobStatus_FAILED :: JobStatus
+pattern JobStatus_FAILED = JobStatus' "FAILED"
+
+pattern JobStatus_IN_PROGRESS :: JobStatus
+pattern JobStatus_IN_PROGRESS = JobStatus' "IN_PROGRESS"
+
+pattern JobStatus_PARTIAL_SUCCESS :: JobStatus
+pattern JobStatus_PARTIAL_SUCCESS = JobStatus' "PARTIAL_SUCCESS"
+
+pattern JobStatus_STOPPED :: JobStatus
+pattern JobStatus_STOPPED = JobStatus' "STOPPED"
+
+pattern JobStatus_STOP_REQUESTED :: JobStatus
+pattern JobStatus_STOP_REQUESTED = JobStatus' "STOP_REQUESTED"
+
+pattern JobStatus_SUBMITTED :: JobStatus
+pattern JobStatus_SUBMITTED = JobStatus' "SUBMITTED"
+
+{-# COMPLETE
+  JobStatus_COMPLETED,
+  JobStatus_FAILED,
+  JobStatus_IN_PROGRESS,
+  JobStatus_PARTIAL_SUCCESS,
+  JobStatus_STOPPED,
+  JobStatus_STOP_REQUESTED,
+  JobStatus_SUBMITTED,
+  JobStatus'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/LanguageCode.hs b/gen/Amazonka/ComprehendMedical/Types/LanguageCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/LanguageCode.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.LanguageCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.LanguageCode
+  ( LanguageCode
+      ( ..,
+        LanguageCode_En
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LanguageCode = LanguageCode'
+  { fromLanguageCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LanguageCode_En :: LanguageCode
+pattern LanguageCode_En = LanguageCode' "en"
+
+{-# COMPLETE
+  LanguageCode_En,
+  LanguageCode'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/OutputDataConfig.hs b/gen/Amazonka/ComprehendMedical/Types/OutputDataConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/OutputDataConfig.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.OutputDataConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.OutputDataConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The output properties for a detection job.
+--
+-- /See:/ 'newOutputDataConfig' smart constructor.
+data OutputDataConfig = OutputDataConfig'
+  { -- | The path to the output data files in the S3 bucket. Comprehend Medical;
+    -- creates an output directory using the job ID so that the output from one
+    -- job does not overwrite the output of another.
+    s3Key :: Prelude.Maybe Prelude.Text,
+    -- | When you use the @OutputDataConfig@ object with asynchronous operations,
+    -- you specify the Amazon S3 location where you want to write the output
+    -- data. The URI must be in the same region as the API endpoint that you
+    -- are calling. The location is used as the prefix for the actual location
+    -- of the output.
+    s3Bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutputDataConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Key', 'outputDataConfig_s3Key' - The path to the output data files in the S3 bucket. Comprehend Medical;
+-- creates an output directory using the job ID so that the output from one
+-- job does not overwrite the output of another.
+--
+-- 's3Bucket', 'outputDataConfig_s3Bucket' - When you use the @OutputDataConfig@ object with asynchronous operations,
+-- you specify the Amazon S3 location where you want to write the output
+-- data. The URI must be in the same region as the API endpoint that you
+-- are calling. The location is used as the prefix for the actual location
+-- of the output.
+newOutputDataConfig ::
+  -- | 's3Bucket'
+  Prelude.Text ->
+  OutputDataConfig
+newOutputDataConfig pS3Bucket_ =
+  OutputDataConfig'
+    { s3Key = Prelude.Nothing,
+      s3Bucket = pS3Bucket_
+    }
+
+-- | The path to the output data files in the S3 bucket. Comprehend Medical;
+-- creates an output directory using the job ID so that the output from one
+-- job does not overwrite the output of another.
+outputDataConfig_s3Key :: Lens.Lens' OutputDataConfig (Prelude.Maybe Prelude.Text)
+outputDataConfig_s3Key = Lens.lens (\OutputDataConfig' {s3Key} -> s3Key) (\s@OutputDataConfig' {} a -> s {s3Key = a} :: OutputDataConfig)
+
+-- | When you use the @OutputDataConfig@ object with asynchronous operations,
+-- you specify the Amazon S3 location where you want to write the output
+-- data. The URI must be in the same region as the API endpoint that you
+-- are calling. The location is used as the prefix for the actual location
+-- of the output.
+outputDataConfig_s3Bucket :: Lens.Lens' OutputDataConfig Prelude.Text
+outputDataConfig_s3Bucket = Lens.lens (\OutputDataConfig' {s3Bucket} -> s3Bucket) (\s@OutputDataConfig' {} a -> s {s3Bucket = a} :: OutputDataConfig)
+
+instance Data.FromJSON OutputDataConfig where
+  parseJSON =
+    Data.withObject
+      "OutputDataConfig"
+      ( \x ->
+          OutputDataConfig'
+            Prelude.<$> (x Data..:? "S3Key")
+            Prelude.<*> (x Data..: "S3Bucket")
+      )
+
+instance Prelude.Hashable OutputDataConfig where
+  hashWithSalt _salt OutputDataConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Key
+      `Prelude.hashWithSalt` s3Bucket
+
+instance Prelude.NFData OutputDataConfig where
+  rnf OutputDataConfig' {..} =
+    Prelude.rnf s3Key
+      `Prelude.seq` Prelude.rnf s3Bucket
+
+instance Data.ToJSON OutputDataConfig where
+  toJSON OutputDataConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("S3Key" Data..=) Prelude.<$> s3Key,
+            Prelude.Just ("S3Bucket" Data..= s3Bucket)
+          ]
+      )
diff --git a/gen/Amazonka/ComprehendMedical/Types/RelationshipType.hs b/gen/Amazonka/ComprehendMedical/Types/RelationshipType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RelationshipType.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RelationshipType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RelationshipType
+  ( RelationshipType
+      ( ..,
+        RelationshipType_ACUITY,
+        RelationshipType_ADMINISTERED_VIA,
+        RelationshipType_AMOUNT,
+        RelationshipType_DIRECTION,
+        RelationshipType_DOSAGE,
+        RelationshipType_DURATION,
+        RelationshipType_EVERY,
+        RelationshipType_FOR,
+        RelationshipType_FORM,
+        RelationshipType_FREQUENCY,
+        RelationshipType_NEGATIVE,
+        RelationshipType_OVERLAP,
+        RelationshipType_RATE,
+        RelationshipType_ROUTE_OR_MODE,
+        RelationshipType_STRENGTH,
+        RelationshipType_SYSTEM_ORGAN_SITE,
+        RelationshipType_TEST_UNIT,
+        RelationshipType_TEST_UNITS,
+        RelationshipType_TEST_VALUE,
+        RelationshipType_WITH_DOSAGE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RelationshipType = RelationshipType'
+  { fromRelationshipType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RelationshipType_ACUITY :: RelationshipType
+pattern RelationshipType_ACUITY = RelationshipType' "ACUITY"
+
+pattern RelationshipType_ADMINISTERED_VIA :: RelationshipType
+pattern RelationshipType_ADMINISTERED_VIA = RelationshipType' "ADMINISTERED_VIA"
+
+pattern RelationshipType_AMOUNT :: RelationshipType
+pattern RelationshipType_AMOUNT = RelationshipType' "AMOUNT"
+
+pattern RelationshipType_DIRECTION :: RelationshipType
+pattern RelationshipType_DIRECTION = RelationshipType' "DIRECTION"
+
+pattern RelationshipType_DOSAGE :: RelationshipType
+pattern RelationshipType_DOSAGE = RelationshipType' "DOSAGE"
+
+pattern RelationshipType_DURATION :: RelationshipType
+pattern RelationshipType_DURATION = RelationshipType' "DURATION"
+
+pattern RelationshipType_EVERY :: RelationshipType
+pattern RelationshipType_EVERY = RelationshipType' "EVERY"
+
+pattern RelationshipType_FOR :: RelationshipType
+pattern RelationshipType_FOR = RelationshipType' "FOR"
+
+pattern RelationshipType_FORM :: RelationshipType
+pattern RelationshipType_FORM = RelationshipType' "FORM"
+
+pattern RelationshipType_FREQUENCY :: RelationshipType
+pattern RelationshipType_FREQUENCY = RelationshipType' "FREQUENCY"
+
+pattern RelationshipType_NEGATIVE :: RelationshipType
+pattern RelationshipType_NEGATIVE = RelationshipType' "NEGATIVE"
+
+pattern RelationshipType_OVERLAP :: RelationshipType
+pattern RelationshipType_OVERLAP = RelationshipType' "OVERLAP"
+
+pattern RelationshipType_RATE :: RelationshipType
+pattern RelationshipType_RATE = RelationshipType' "RATE"
+
+pattern RelationshipType_ROUTE_OR_MODE :: RelationshipType
+pattern RelationshipType_ROUTE_OR_MODE = RelationshipType' "ROUTE_OR_MODE"
+
+pattern RelationshipType_STRENGTH :: RelationshipType
+pattern RelationshipType_STRENGTH = RelationshipType' "STRENGTH"
+
+pattern RelationshipType_SYSTEM_ORGAN_SITE :: RelationshipType
+pattern RelationshipType_SYSTEM_ORGAN_SITE = RelationshipType' "SYSTEM_ORGAN_SITE"
+
+pattern RelationshipType_TEST_UNIT :: RelationshipType
+pattern RelationshipType_TEST_UNIT = RelationshipType' "TEST_UNIT"
+
+pattern RelationshipType_TEST_UNITS :: RelationshipType
+pattern RelationshipType_TEST_UNITS = RelationshipType' "TEST_UNITS"
+
+pattern RelationshipType_TEST_VALUE :: RelationshipType
+pattern RelationshipType_TEST_VALUE = RelationshipType' "TEST_VALUE"
+
+pattern RelationshipType_WITH_DOSAGE :: RelationshipType
+pattern RelationshipType_WITH_DOSAGE = RelationshipType' "WITH_DOSAGE"
+
+{-# COMPLETE
+  RelationshipType_ACUITY,
+  RelationshipType_ADMINISTERED_VIA,
+  RelationshipType_AMOUNT,
+  RelationshipType_DIRECTION,
+  RelationshipType_DOSAGE,
+  RelationshipType_DURATION,
+  RelationshipType_EVERY,
+  RelationshipType_FOR,
+  RelationshipType_FORM,
+  RelationshipType_FREQUENCY,
+  RelationshipType_NEGATIVE,
+  RelationshipType_OVERLAP,
+  RelationshipType_RATE,
+  RelationshipType_ROUTE_OR_MODE,
+  RelationshipType_STRENGTH,
+  RelationshipType_SYSTEM_ORGAN_SITE,
+  RelationshipType_TEST_UNIT,
+  RelationshipType_TEST_UNITS,
+  RelationshipType_TEST_VALUE,
+  RelationshipType_WITH_DOSAGE,
+  RelationshipType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/RxNormAttribute.hs b/gen/Amazonka/ComprehendMedical/Types/RxNormAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RxNormAttribute.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RxNormAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RxNormAttribute where
+
+import Amazonka.ComprehendMedical.Types.RxNormAttributeType
+import Amazonka.ComprehendMedical.Types.RxNormTrait
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The extracted attributes that relate to this entity. The attributes
+-- recognized by InferRxNorm are @DOSAGE@, @DURATION@, @FORM@, @FREQUENCY@,
+-- @RATE@, @ROUTE_OR_MODE@.
+--
+-- /See:/ 'newRxNormAttribute' smart constructor.
+data RxNormAttribute = RxNormAttribute'
+  { -- | The 0-based character offset in the input text that shows where the
+    -- attribute begins. The offset returns the UTF-8 code point in the string.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The 0-based character offset in the input text that shows where the
+    -- attribute ends. The offset returns the UTF-8 code point in the string.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The numeric identifier for this attribute. This is a monotonically
+    -- increasing id unique within this response rather than a global unique
+    -- identifier.
+    id :: Prelude.Maybe Prelude.Int,
+    -- | The level of confidence that Amazon Comprehend Medical has that the
+    -- attribute is accurately linked to an entity.
+    relationshipScore :: Prelude.Maybe Prelude.Double,
+    -- | The level of confidence that Comprehend Medical has that the segment of
+    -- text is correctly recognized as an attribute.
+    score :: Prelude.Maybe Prelude.Double,
+    -- | The segment of input text which corresponds to the detected attribute.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | Contextual information for the attribute. InferRxNorm recognizes the
+    -- trait @NEGATION@ for attributes, i.e. that the patient is not taking a
+    -- specific dose or form of a medication.
+    traits :: Prelude.Maybe [RxNormTrait],
+    -- | The type of attribute. The types of attributes recognized by InferRxNorm
+    -- are @BRAND_NAME@ and @GENERIC_NAME@.
+    type' :: Prelude.Maybe RxNormAttributeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RxNormAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'beginOffset', 'rxNormAttribute_beginOffset' - The 0-based character offset in the input text that shows where the
+-- attribute begins. The offset returns the UTF-8 code point in the string.
+--
+-- 'endOffset', 'rxNormAttribute_endOffset' - The 0-based character offset in the input text that shows where the
+-- attribute ends. The offset returns the UTF-8 code point in the string.
+--
+-- 'id', 'rxNormAttribute_id' - The numeric identifier for this attribute. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+--
+-- 'relationshipScore', 'rxNormAttribute_relationshipScore' - The level of confidence that Amazon Comprehend Medical has that the
+-- attribute is accurately linked to an entity.
+--
+-- 'score', 'rxNormAttribute_score' - The level of confidence that Comprehend Medical has that the segment of
+-- text is correctly recognized as an attribute.
+--
+-- 'text', 'rxNormAttribute_text' - The segment of input text which corresponds to the detected attribute.
+--
+-- 'traits', 'rxNormAttribute_traits' - Contextual information for the attribute. InferRxNorm recognizes the
+-- trait @NEGATION@ for attributes, i.e. that the patient is not taking a
+-- specific dose or form of a medication.
+--
+-- 'type'', 'rxNormAttribute_type' - The type of attribute. The types of attributes recognized by InferRxNorm
+-- are @BRAND_NAME@ and @GENERIC_NAME@.
+newRxNormAttribute ::
+  RxNormAttribute
+newRxNormAttribute =
+  RxNormAttribute'
+    { beginOffset = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      id = Prelude.Nothing,
+      relationshipScore = Prelude.Nothing,
+      score = Prelude.Nothing,
+      text = Prelude.Nothing,
+      traits = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The 0-based character offset in the input text that shows where the
+-- attribute begins. The offset returns the UTF-8 code point in the string.
+rxNormAttribute_beginOffset :: Lens.Lens' RxNormAttribute (Prelude.Maybe Prelude.Int)
+rxNormAttribute_beginOffset = Lens.lens (\RxNormAttribute' {beginOffset} -> beginOffset) (\s@RxNormAttribute' {} a -> s {beginOffset = a} :: RxNormAttribute)
+
+-- | The 0-based character offset in the input text that shows where the
+-- attribute ends. The offset returns the UTF-8 code point in the string.
+rxNormAttribute_endOffset :: Lens.Lens' RxNormAttribute (Prelude.Maybe Prelude.Int)
+rxNormAttribute_endOffset = Lens.lens (\RxNormAttribute' {endOffset} -> endOffset) (\s@RxNormAttribute' {} a -> s {endOffset = a} :: RxNormAttribute)
+
+-- | The numeric identifier for this attribute. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+rxNormAttribute_id :: Lens.Lens' RxNormAttribute (Prelude.Maybe Prelude.Int)
+rxNormAttribute_id = Lens.lens (\RxNormAttribute' {id} -> id) (\s@RxNormAttribute' {} a -> s {id = a} :: RxNormAttribute)
+
+-- | The level of confidence that Amazon Comprehend Medical has that the
+-- attribute is accurately linked to an entity.
+rxNormAttribute_relationshipScore :: Lens.Lens' RxNormAttribute (Prelude.Maybe Prelude.Double)
+rxNormAttribute_relationshipScore = Lens.lens (\RxNormAttribute' {relationshipScore} -> relationshipScore) (\s@RxNormAttribute' {} a -> s {relationshipScore = a} :: RxNormAttribute)
+
+-- | The level of confidence that Comprehend Medical has that the segment of
+-- text is correctly recognized as an attribute.
+rxNormAttribute_score :: Lens.Lens' RxNormAttribute (Prelude.Maybe Prelude.Double)
+rxNormAttribute_score = Lens.lens (\RxNormAttribute' {score} -> score) (\s@RxNormAttribute' {} a -> s {score = a} :: RxNormAttribute)
+
+-- | The segment of input text which corresponds to the detected attribute.
+rxNormAttribute_text :: Lens.Lens' RxNormAttribute (Prelude.Maybe Prelude.Text)
+rxNormAttribute_text = Lens.lens (\RxNormAttribute' {text} -> text) (\s@RxNormAttribute' {} a -> s {text = a} :: RxNormAttribute)
+
+-- | Contextual information for the attribute. InferRxNorm recognizes the
+-- trait @NEGATION@ for attributes, i.e. that the patient is not taking a
+-- specific dose or form of a medication.
+rxNormAttribute_traits :: Lens.Lens' RxNormAttribute (Prelude.Maybe [RxNormTrait])
+rxNormAttribute_traits = Lens.lens (\RxNormAttribute' {traits} -> traits) (\s@RxNormAttribute' {} a -> s {traits = a} :: RxNormAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of attribute. The types of attributes recognized by InferRxNorm
+-- are @BRAND_NAME@ and @GENERIC_NAME@.
+rxNormAttribute_type :: Lens.Lens' RxNormAttribute (Prelude.Maybe RxNormAttributeType)
+rxNormAttribute_type = Lens.lens (\RxNormAttribute' {type'} -> type') (\s@RxNormAttribute' {} a -> s {type' = a} :: RxNormAttribute)
+
+instance Data.FromJSON RxNormAttribute where
+  parseJSON =
+    Data.withObject
+      "RxNormAttribute"
+      ( \x ->
+          RxNormAttribute'
+            Prelude.<$> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "RelationshipScore")
+            Prelude.<*> (x Data..:? "Score")
+            Prelude.<*> (x Data..:? "Text")
+            Prelude.<*> (x Data..:? "Traits" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable RxNormAttribute where
+  hashWithSalt _salt RxNormAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` relationshipScore
+      `Prelude.hashWithSalt` score
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` traits
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData RxNormAttribute where
+  rnf RxNormAttribute' {..} =
+    Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf relationshipScore
+      `Prelude.seq` Prelude.rnf score
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf traits
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Types/RxNormAttributeType.hs b/gen/Amazonka/ComprehendMedical/Types/RxNormAttributeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RxNormAttributeType.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RxNormAttributeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RxNormAttributeType
+  ( RxNormAttributeType
+      ( ..,
+        RxNormAttributeType_DOSAGE,
+        RxNormAttributeType_DURATION,
+        RxNormAttributeType_FORM,
+        RxNormAttributeType_FREQUENCY,
+        RxNormAttributeType_RATE,
+        RxNormAttributeType_ROUTE_OR_MODE,
+        RxNormAttributeType_STRENGTH
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RxNormAttributeType = RxNormAttributeType'
+  { fromRxNormAttributeType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RxNormAttributeType_DOSAGE :: RxNormAttributeType
+pattern RxNormAttributeType_DOSAGE = RxNormAttributeType' "DOSAGE"
+
+pattern RxNormAttributeType_DURATION :: RxNormAttributeType
+pattern RxNormAttributeType_DURATION = RxNormAttributeType' "DURATION"
+
+pattern RxNormAttributeType_FORM :: RxNormAttributeType
+pattern RxNormAttributeType_FORM = RxNormAttributeType' "FORM"
+
+pattern RxNormAttributeType_FREQUENCY :: RxNormAttributeType
+pattern RxNormAttributeType_FREQUENCY = RxNormAttributeType' "FREQUENCY"
+
+pattern RxNormAttributeType_RATE :: RxNormAttributeType
+pattern RxNormAttributeType_RATE = RxNormAttributeType' "RATE"
+
+pattern RxNormAttributeType_ROUTE_OR_MODE :: RxNormAttributeType
+pattern RxNormAttributeType_ROUTE_OR_MODE = RxNormAttributeType' "ROUTE_OR_MODE"
+
+pattern RxNormAttributeType_STRENGTH :: RxNormAttributeType
+pattern RxNormAttributeType_STRENGTH = RxNormAttributeType' "STRENGTH"
+
+{-# COMPLETE
+  RxNormAttributeType_DOSAGE,
+  RxNormAttributeType_DURATION,
+  RxNormAttributeType_FORM,
+  RxNormAttributeType_FREQUENCY,
+  RxNormAttributeType_RATE,
+  RxNormAttributeType_ROUTE_OR_MODE,
+  RxNormAttributeType_STRENGTH,
+  RxNormAttributeType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/RxNormConcept.hs b/gen/Amazonka/ComprehendMedical/Types/RxNormConcept.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RxNormConcept.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RxNormConcept
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RxNormConcept where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The RxNorm concept that the entity could refer to, along with a score
+-- indicating the likelihood of the match.
+--
+-- /See:/ 'newRxNormConcept' smart constructor.
+data RxNormConcept = RxNormConcept'
+  { -- | RxNorm concept ID, also known as the RxCUI.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The description of the RxNorm concept.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The level of confidence that Amazon Comprehend Medical has that the
+    -- entity is accurately linked to the reported RxNorm concept.
+    score :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RxNormConcept' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'rxNormConcept_code' - RxNorm concept ID, also known as the RxCUI.
+--
+-- 'description', 'rxNormConcept_description' - The description of the RxNorm concept.
+--
+-- 'score', 'rxNormConcept_score' - The level of confidence that Amazon Comprehend Medical has that the
+-- entity is accurately linked to the reported RxNorm concept.
+newRxNormConcept ::
+  RxNormConcept
+newRxNormConcept =
+  RxNormConcept'
+    { code = Prelude.Nothing,
+      description = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | RxNorm concept ID, also known as the RxCUI.
+rxNormConcept_code :: Lens.Lens' RxNormConcept (Prelude.Maybe Prelude.Text)
+rxNormConcept_code = Lens.lens (\RxNormConcept' {code} -> code) (\s@RxNormConcept' {} a -> s {code = a} :: RxNormConcept)
+
+-- | The description of the RxNorm concept.
+rxNormConcept_description :: Lens.Lens' RxNormConcept (Prelude.Maybe Prelude.Text)
+rxNormConcept_description = Lens.lens (\RxNormConcept' {description} -> description) (\s@RxNormConcept' {} a -> s {description = a} :: RxNormConcept)
+
+-- | The level of confidence that Amazon Comprehend Medical has that the
+-- entity is accurately linked to the reported RxNorm concept.
+rxNormConcept_score :: Lens.Lens' RxNormConcept (Prelude.Maybe Prelude.Double)
+rxNormConcept_score = Lens.lens (\RxNormConcept' {score} -> score) (\s@RxNormConcept' {} a -> s {score = a} :: RxNormConcept)
+
+instance Data.FromJSON RxNormConcept where
+  parseJSON =
+    Data.withObject
+      "RxNormConcept"
+      ( \x ->
+          RxNormConcept'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Score")
+      )
+
+instance Prelude.Hashable RxNormConcept where
+  hashWithSalt _salt RxNormConcept' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData RxNormConcept where
+  rnf RxNormConcept' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/ComprehendMedical/Types/RxNormEntity.hs b/gen/Amazonka/ComprehendMedical/Types/RxNormEntity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RxNormEntity.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RxNormEntity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RxNormEntity where
+
+import Amazonka.ComprehendMedical.Types.RxNormAttribute
+import Amazonka.ComprehendMedical.Types.RxNormConcept
+import Amazonka.ComprehendMedical.Types.RxNormEntityCategory
+import Amazonka.ComprehendMedical.Types.RxNormEntityType
+import Amazonka.ComprehendMedical.Types.RxNormTrait
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The collection of medical entities extracted from the input text and
+-- their associated information. For each entity, the response provides the
+-- entity text, the entity category, where the entity text begins and ends,
+-- and the level of confidence that Amazon Comprehend Medical has in the
+-- detection and analysis. Attributes and traits of the entity are also
+-- returned.
+--
+-- /See:/ 'newRxNormEntity' smart constructor.
+data RxNormEntity = RxNormEntity'
+  { -- | The extracted attributes that relate to the entity. The attributes
+    -- recognized by InferRxNorm are @DOSAGE@, @DURATION@, @FORM@, @FREQUENCY@,
+    -- @RATE@, @ROUTE_OR_MODE@, and @STRENGTH@.
+    attributes :: Prelude.Maybe [RxNormAttribute],
+    -- | The 0-based character offset in the input text that shows where the
+    -- entity begins. The offset returns the UTF-8 code point in the string.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The category of the entity. The recognized categories are @GENERIC@ or
+    -- @BRAND_NAME@.
+    category :: Prelude.Maybe RxNormEntityCategory,
+    -- | The 0-based character offset in the input text that shows where the
+    -- entity ends. The offset returns the UTF-8 code point in the string.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The numeric identifier for the entity. This is a monotonically
+    -- increasing id unique within this response rather than a global unique
+    -- identifier.
+    id :: Prelude.Maybe Prelude.Int,
+    -- | The RxNorm concepts that the entity could refer to, along with a score
+    -- indicating the likelihood of the match.
+    rxNormConcepts :: Prelude.Maybe [RxNormConcept],
+    -- | The level of confidence that Amazon Comprehend Medical has in the
+    -- accuracy of the detected entity.
+    score :: Prelude.Maybe Prelude.Double,
+    -- | The segment of input text extracted from which the entity was detected.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | Contextual information for the entity.
+    traits :: Prelude.Maybe [RxNormTrait],
+    -- | Describes the specific type of entity. For InferRxNorm, the recognized
+    -- entity type is @MEDICATION@.
+    type' :: Prelude.Maybe RxNormEntityType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RxNormEntity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'rxNormEntity_attributes' - The extracted attributes that relate to the entity. The attributes
+-- recognized by InferRxNorm are @DOSAGE@, @DURATION@, @FORM@, @FREQUENCY@,
+-- @RATE@, @ROUTE_OR_MODE@, and @STRENGTH@.
+--
+-- 'beginOffset', 'rxNormEntity_beginOffset' - The 0-based character offset in the input text that shows where the
+-- entity begins. The offset returns the UTF-8 code point in the string.
+--
+-- 'category', 'rxNormEntity_category' - The category of the entity. The recognized categories are @GENERIC@ or
+-- @BRAND_NAME@.
+--
+-- 'endOffset', 'rxNormEntity_endOffset' - The 0-based character offset in the input text that shows where the
+-- entity ends. The offset returns the UTF-8 code point in the string.
+--
+-- 'id', 'rxNormEntity_id' - The numeric identifier for the entity. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+--
+-- 'rxNormConcepts', 'rxNormEntity_rxNormConcepts' - The RxNorm concepts that the entity could refer to, along with a score
+-- indicating the likelihood of the match.
+--
+-- 'score', 'rxNormEntity_score' - The level of confidence that Amazon Comprehend Medical has in the
+-- accuracy of the detected entity.
+--
+-- 'text', 'rxNormEntity_text' - The segment of input text extracted from which the entity was detected.
+--
+-- 'traits', 'rxNormEntity_traits' - Contextual information for the entity.
+--
+-- 'type'', 'rxNormEntity_type' - Describes the specific type of entity. For InferRxNorm, the recognized
+-- entity type is @MEDICATION@.
+newRxNormEntity ::
+  RxNormEntity
+newRxNormEntity =
+  RxNormEntity'
+    { attributes = Prelude.Nothing,
+      beginOffset = Prelude.Nothing,
+      category = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      id = Prelude.Nothing,
+      rxNormConcepts = Prelude.Nothing,
+      score = Prelude.Nothing,
+      text = Prelude.Nothing,
+      traits = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The extracted attributes that relate to the entity. The attributes
+-- recognized by InferRxNorm are @DOSAGE@, @DURATION@, @FORM@, @FREQUENCY@,
+-- @RATE@, @ROUTE_OR_MODE@, and @STRENGTH@.
+rxNormEntity_attributes :: Lens.Lens' RxNormEntity (Prelude.Maybe [RxNormAttribute])
+rxNormEntity_attributes = Lens.lens (\RxNormEntity' {attributes} -> attributes) (\s@RxNormEntity' {} a -> s {attributes = a} :: RxNormEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The 0-based character offset in the input text that shows where the
+-- entity begins. The offset returns the UTF-8 code point in the string.
+rxNormEntity_beginOffset :: Lens.Lens' RxNormEntity (Prelude.Maybe Prelude.Int)
+rxNormEntity_beginOffset = Lens.lens (\RxNormEntity' {beginOffset} -> beginOffset) (\s@RxNormEntity' {} a -> s {beginOffset = a} :: RxNormEntity)
+
+-- | The category of the entity. The recognized categories are @GENERIC@ or
+-- @BRAND_NAME@.
+rxNormEntity_category :: Lens.Lens' RxNormEntity (Prelude.Maybe RxNormEntityCategory)
+rxNormEntity_category = Lens.lens (\RxNormEntity' {category} -> category) (\s@RxNormEntity' {} a -> s {category = a} :: RxNormEntity)
+
+-- | The 0-based character offset in the input text that shows where the
+-- entity ends. The offset returns the UTF-8 code point in the string.
+rxNormEntity_endOffset :: Lens.Lens' RxNormEntity (Prelude.Maybe Prelude.Int)
+rxNormEntity_endOffset = Lens.lens (\RxNormEntity' {endOffset} -> endOffset) (\s@RxNormEntity' {} a -> s {endOffset = a} :: RxNormEntity)
+
+-- | The numeric identifier for the entity. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+rxNormEntity_id :: Lens.Lens' RxNormEntity (Prelude.Maybe Prelude.Int)
+rxNormEntity_id = Lens.lens (\RxNormEntity' {id} -> id) (\s@RxNormEntity' {} a -> s {id = a} :: RxNormEntity)
+
+-- | The RxNorm concepts that the entity could refer to, along with a score
+-- indicating the likelihood of the match.
+rxNormEntity_rxNormConcepts :: Lens.Lens' RxNormEntity (Prelude.Maybe [RxNormConcept])
+rxNormEntity_rxNormConcepts = Lens.lens (\RxNormEntity' {rxNormConcepts} -> rxNormConcepts) (\s@RxNormEntity' {} a -> s {rxNormConcepts = a} :: RxNormEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The level of confidence that Amazon Comprehend Medical has in the
+-- accuracy of the detected entity.
+rxNormEntity_score :: Lens.Lens' RxNormEntity (Prelude.Maybe Prelude.Double)
+rxNormEntity_score = Lens.lens (\RxNormEntity' {score} -> score) (\s@RxNormEntity' {} a -> s {score = a} :: RxNormEntity)
+
+-- | The segment of input text extracted from which the entity was detected.
+rxNormEntity_text :: Lens.Lens' RxNormEntity (Prelude.Maybe Prelude.Text)
+rxNormEntity_text = Lens.lens (\RxNormEntity' {text} -> text) (\s@RxNormEntity' {} a -> s {text = a} :: RxNormEntity)
+
+-- | Contextual information for the entity.
+rxNormEntity_traits :: Lens.Lens' RxNormEntity (Prelude.Maybe [RxNormTrait])
+rxNormEntity_traits = Lens.lens (\RxNormEntity' {traits} -> traits) (\s@RxNormEntity' {} a -> s {traits = a} :: RxNormEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the specific type of entity. For InferRxNorm, the recognized
+-- entity type is @MEDICATION@.
+rxNormEntity_type :: Lens.Lens' RxNormEntity (Prelude.Maybe RxNormEntityType)
+rxNormEntity_type = Lens.lens (\RxNormEntity' {type'} -> type') (\s@RxNormEntity' {} a -> s {type' = a} :: RxNormEntity)
+
+instance Data.FromJSON RxNormEntity where
+  parseJSON =
+    Data.withObject
+      "RxNormEntity"
+      ( \x ->
+          RxNormEntity'
+            Prelude.<$> (x Data..:? "Attributes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "Category")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "RxNormConcepts" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Score")
+            Prelude.<*> (x Data..:? "Text")
+            Prelude.<*> (x Data..:? "Traits" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable RxNormEntity where
+  hashWithSalt _salt RxNormEntity' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` rxNormConcepts
+      `Prelude.hashWithSalt` score
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` traits
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData RxNormEntity where
+  rnf RxNormEntity' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf category
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf rxNormConcepts
+      `Prelude.seq` Prelude.rnf score
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf traits
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Types/RxNormEntityCategory.hs b/gen/Amazonka/ComprehendMedical/Types/RxNormEntityCategory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RxNormEntityCategory.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RxNormEntityCategory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RxNormEntityCategory
+  ( RxNormEntityCategory
+      ( ..,
+        RxNormEntityCategory_MEDICATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RxNormEntityCategory = RxNormEntityCategory'
+  { fromRxNormEntityCategory ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RxNormEntityCategory_MEDICATION :: RxNormEntityCategory
+pattern RxNormEntityCategory_MEDICATION = RxNormEntityCategory' "MEDICATION"
+
+{-# COMPLETE
+  RxNormEntityCategory_MEDICATION,
+  RxNormEntityCategory'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/RxNormEntityType.hs b/gen/Amazonka/ComprehendMedical/Types/RxNormEntityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RxNormEntityType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RxNormEntityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RxNormEntityType
+  ( RxNormEntityType
+      ( ..,
+        RxNormEntityType_BRAND_NAME,
+        RxNormEntityType_GENERIC_NAME
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RxNormEntityType = RxNormEntityType'
+  { fromRxNormEntityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RxNormEntityType_BRAND_NAME :: RxNormEntityType
+pattern RxNormEntityType_BRAND_NAME = RxNormEntityType' "BRAND_NAME"
+
+pattern RxNormEntityType_GENERIC_NAME :: RxNormEntityType
+pattern RxNormEntityType_GENERIC_NAME = RxNormEntityType' "GENERIC_NAME"
+
+{-# COMPLETE
+  RxNormEntityType_BRAND_NAME,
+  RxNormEntityType_GENERIC_NAME,
+  RxNormEntityType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/RxNormTrait.hs b/gen/Amazonka/ComprehendMedical/Types/RxNormTrait.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RxNormTrait.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RxNormTrait
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RxNormTrait where
+
+import Amazonka.ComprehendMedical.Types.RxNormTraitName
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The contextual information for the entity. InferRxNorm recognizes the
+-- trait @NEGATION@, which is any indication that the patient is not taking
+-- a medication.
+--
+-- /See:/ 'newRxNormTrait' smart constructor.
+data RxNormTrait = RxNormTrait'
+  { -- | Provides a name or contextual description about the trait.
+    name :: Prelude.Maybe RxNormTraitName,
+    -- | The level of confidence that Amazon Comprehend Medical has in the
+    -- accuracy of the detected trait.
+    score :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RxNormTrait' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'rxNormTrait_name' - Provides a name or contextual description about the trait.
+--
+-- 'score', 'rxNormTrait_score' - The level of confidence that Amazon Comprehend Medical has in the
+-- accuracy of the detected trait.
+newRxNormTrait ::
+  RxNormTrait
+newRxNormTrait =
+  RxNormTrait'
+    { name = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | Provides a name or contextual description about the trait.
+rxNormTrait_name :: Lens.Lens' RxNormTrait (Prelude.Maybe RxNormTraitName)
+rxNormTrait_name = Lens.lens (\RxNormTrait' {name} -> name) (\s@RxNormTrait' {} a -> s {name = a} :: RxNormTrait)
+
+-- | The level of confidence that Amazon Comprehend Medical has in the
+-- accuracy of the detected trait.
+rxNormTrait_score :: Lens.Lens' RxNormTrait (Prelude.Maybe Prelude.Double)
+rxNormTrait_score = Lens.lens (\RxNormTrait' {score} -> score) (\s@RxNormTrait' {} a -> s {score = a} :: RxNormTrait)
+
+instance Data.FromJSON RxNormTrait where
+  parseJSON =
+    Data.withObject
+      "RxNormTrait"
+      ( \x ->
+          RxNormTrait'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Score")
+      )
+
+instance Prelude.Hashable RxNormTrait where
+  hashWithSalt _salt RxNormTrait' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData RxNormTrait where
+  rnf RxNormTrait' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/ComprehendMedical/Types/RxNormTraitName.hs b/gen/Amazonka/ComprehendMedical/Types/RxNormTraitName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/RxNormTraitName.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.RxNormTraitName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.RxNormTraitName
+  ( RxNormTraitName
+      ( ..,
+        RxNormTraitName_NEGATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RxNormTraitName = RxNormTraitName'
+  { fromRxNormTraitName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RxNormTraitName_NEGATION :: RxNormTraitName
+pattern RxNormTraitName_NEGATION = RxNormTraitName' "NEGATION"
+
+{-# COMPLETE
+  RxNormTraitName_NEGATION,
+  RxNormTraitName'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTAttribute.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTAttribute.hs
@@ -0,0 +1,238 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTAttribute where
+
+import Amazonka.ComprehendMedical.Types.SNOMEDCTAttributeType
+import Amazonka.ComprehendMedical.Types.SNOMEDCTConcept
+import Amazonka.ComprehendMedical.Types.SNOMEDCTEntityCategory
+import Amazonka.ComprehendMedical.Types.SNOMEDCTRelationshipType
+import Amazonka.ComprehendMedical.Types.SNOMEDCTTrait
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The extracted attributes that relate to an entity. An extracted segment
+-- of the text that is an attribute of an entity, or otherwise related to
+-- an entity, such as the dosage of a medication taken.
+--
+-- /See:/ 'newSNOMEDCTAttribute' smart constructor.
+data SNOMEDCTAttribute = SNOMEDCTAttribute'
+  { -- | The 0-based character offset in the input text that shows where the
+    -- attribute begins. The offset returns the UTF-8 code point in the string.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The category of the detected attribute. Possible categories include
+    -- MEDICAL_CONDITION, ANATOMY, and TEST_TREATMENT_PROCEDURE.
+    category :: Prelude.Maybe SNOMEDCTEntityCategory,
+    -- | The 0-based character offset in the input text that shows where the
+    -- attribute ends. The offset returns the UTF-8 code point in the string.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The numeric identifier for this attribute. This is a monotonically
+    -- increasing id unique within this response rather than a global unique
+    -- identifier.
+    id :: Prelude.Maybe Prelude.Int,
+    -- | The level of confidence that Comprehend Medical has that this attribute
+    -- is correctly related to this entity.
+    relationshipScore :: Prelude.Maybe Prelude.Double,
+    -- | The type of relationship that exists between the entity and the related
+    -- attribute.
+    relationshipType :: Prelude.Maybe SNOMEDCTRelationshipType,
+    -- | The SNOMED-CT concepts specific to an attribute, along with a score
+    -- indicating the likelihood of the match.
+    sNOMEDCTConcepts :: Prelude.Maybe [SNOMEDCTConcept],
+    -- | The level of confidence that Comprehend Medical has that the segment of
+    -- text is correctly recognized as an attribute.
+    score :: Prelude.Maybe Prelude.Double,
+    -- | The segment of input text extracted as this attribute.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | Contextual information for an attribute. Examples include signs,
+    -- symptoms, diagnosis, and negation.
+    traits :: Prelude.Maybe [SNOMEDCTTrait],
+    -- | The type of attribute. Possible types include DX_NAME, ACUITY,
+    -- DIRECTION, SYSTEM_ORGAN_SITE,TEST_NAME, TEST_VALUE, TEST_UNIT,
+    -- PROCEDURE_NAME, and TREATMENT_NAME.
+    type' :: Prelude.Maybe SNOMEDCTAttributeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SNOMEDCTAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'beginOffset', 'sNOMEDCTAttribute_beginOffset' - The 0-based character offset in the input text that shows where the
+-- attribute begins. The offset returns the UTF-8 code point in the string.
+--
+-- 'category', 'sNOMEDCTAttribute_category' - The category of the detected attribute. Possible categories include
+-- MEDICAL_CONDITION, ANATOMY, and TEST_TREATMENT_PROCEDURE.
+--
+-- 'endOffset', 'sNOMEDCTAttribute_endOffset' - The 0-based character offset in the input text that shows where the
+-- attribute ends. The offset returns the UTF-8 code point in the string.
+--
+-- 'id', 'sNOMEDCTAttribute_id' - The numeric identifier for this attribute. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+--
+-- 'relationshipScore', 'sNOMEDCTAttribute_relationshipScore' - The level of confidence that Comprehend Medical has that this attribute
+-- is correctly related to this entity.
+--
+-- 'relationshipType', 'sNOMEDCTAttribute_relationshipType' - The type of relationship that exists between the entity and the related
+-- attribute.
+--
+-- 'sNOMEDCTConcepts', 'sNOMEDCTAttribute_sNOMEDCTConcepts' - The SNOMED-CT concepts specific to an attribute, along with a score
+-- indicating the likelihood of the match.
+--
+-- 'score', 'sNOMEDCTAttribute_score' - The level of confidence that Comprehend Medical has that the segment of
+-- text is correctly recognized as an attribute.
+--
+-- 'text', 'sNOMEDCTAttribute_text' - The segment of input text extracted as this attribute.
+--
+-- 'traits', 'sNOMEDCTAttribute_traits' - Contextual information for an attribute. Examples include signs,
+-- symptoms, diagnosis, and negation.
+--
+-- 'type'', 'sNOMEDCTAttribute_type' - The type of attribute. Possible types include DX_NAME, ACUITY,
+-- DIRECTION, SYSTEM_ORGAN_SITE,TEST_NAME, TEST_VALUE, TEST_UNIT,
+-- PROCEDURE_NAME, and TREATMENT_NAME.
+newSNOMEDCTAttribute ::
+  SNOMEDCTAttribute
+newSNOMEDCTAttribute =
+  SNOMEDCTAttribute'
+    { beginOffset = Prelude.Nothing,
+      category = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      id = Prelude.Nothing,
+      relationshipScore = Prelude.Nothing,
+      relationshipType = Prelude.Nothing,
+      sNOMEDCTConcepts = Prelude.Nothing,
+      score = Prelude.Nothing,
+      text = Prelude.Nothing,
+      traits = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The 0-based character offset in the input text that shows where the
+-- attribute begins. The offset returns the UTF-8 code point in the string.
+sNOMEDCTAttribute_beginOffset :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe Prelude.Int)
+sNOMEDCTAttribute_beginOffset = Lens.lens (\SNOMEDCTAttribute' {beginOffset} -> beginOffset) (\s@SNOMEDCTAttribute' {} a -> s {beginOffset = a} :: SNOMEDCTAttribute)
+
+-- | The category of the detected attribute. Possible categories include
+-- MEDICAL_CONDITION, ANATOMY, and TEST_TREATMENT_PROCEDURE.
+sNOMEDCTAttribute_category :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe SNOMEDCTEntityCategory)
+sNOMEDCTAttribute_category = Lens.lens (\SNOMEDCTAttribute' {category} -> category) (\s@SNOMEDCTAttribute' {} a -> s {category = a} :: SNOMEDCTAttribute)
+
+-- | The 0-based character offset in the input text that shows where the
+-- attribute ends. The offset returns the UTF-8 code point in the string.
+sNOMEDCTAttribute_endOffset :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe Prelude.Int)
+sNOMEDCTAttribute_endOffset = Lens.lens (\SNOMEDCTAttribute' {endOffset} -> endOffset) (\s@SNOMEDCTAttribute' {} a -> s {endOffset = a} :: SNOMEDCTAttribute)
+
+-- | The numeric identifier for this attribute. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+sNOMEDCTAttribute_id :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe Prelude.Int)
+sNOMEDCTAttribute_id = Lens.lens (\SNOMEDCTAttribute' {id} -> id) (\s@SNOMEDCTAttribute' {} a -> s {id = a} :: SNOMEDCTAttribute)
+
+-- | The level of confidence that Comprehend Medical has that this attribute
+-- is correctly related to this entity.
+sNOMEDCTAttribute_relationshipScore :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe Prelude.Double)
+sNOMEDCTAttribute_relationshipScore = Lens.lens (\SNOMEDCTAttribute' {relationshipScore} -> relationshipScore) (\s@SNOMEDCTAttribute' {} a -> s {relationshipScore = a} :: SNOMEDCTAttribute)
+
+-- | The type of relationship that exists between the entity and the related
+-- attribute.
+sNOMEDCTAttribute_relationshipType :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe SNOMEDCTRelationshipType)
+sNOMEDCTAttribute_relationshipType = Lens.lens (\SNOMEDCTAttribute' {relationshipType} -> relationshipType) (\s@SNOMEDCTAttribute' {} a -> s {relationshipType = a} :: SNOMEDCTAttribute)
+
+-- | The SNOMED-CT concepts specific to an attribute, along with a score
+-- indicating the likelihood of the match.
+sNOMEDCTAttribute_sNOMEDCTConcepts :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe [SNOMEDCTConcept])
+sNOMEDCTAttribute_sNOMEDCTConcepts = Lens.lens (\SNOMEDCTAttribute' {sNOMEDCTConcepts} -> sNOMEDCTConcepts) (\s@SNOMEDCTAttribute' {} a -> s {sNOMEDCTConcepts = a} :: SNOMEDCTAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The level of confidence that Comprehend Medical has that the segment of
+-- text is correctly recognized as an attribute.
+sNOMEDCTAttribute_score :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe Prelude.Double)
+sNOMEDCTAttribute_score = Lens.lens (\SNOMEDCTAttribute' {score} -> score) (\s@SNOMEDCTAttribute' {} a -> s {score = a} :: SNOMEDCTAttribute)
+
+-- | The segment of input text extracted as this attribute.
+sNOMEDCTAttribute_text :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe Prelude.Text)
+sNOMEDCTAttribute_text = Lens.lens (\SNOMEDCTAttribute' {text} -> text) (\s@SNOMEDCTAttribute' {} a -> s {text = a} :: SNOMEDCTAttribute)
+
+-- | Contextual information for an attribute. Examples include signs,
+-- symptoms, diagnosis, and negation.
+sNOMEDCTAttribute_traits :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe [SNOMEDCTTrait])
+sNOMEDCTAttribute_traits = Lens.lens (\SNOMEDCTAttribute' {traits} -> traits) (\s@SNOMEDCTAttribute' {} a -> s {traits = a} :: SNOMEDCTAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of attribute. Possible types include DX_NAME, ACUITY,
+-- DIRECTION, SYSTEM_ORGAN_SITE,TEST_NAME, TEST_VALUE, TEST_UNIT,
+-- PROCEDURE_NAME, and TREATMENT_NAME.
+sNOMEDCTAttribute_type :: Lens.Lens' SNOMEDCTAttribute (Prelude.Maybe SNOMEDCTAttributeType)
+sNOMEDCTAttribute_type = Lens.lens (\SNOMEDCTAttribute' {type'} -> type') (\s@SNOMEDCTAttribute' {} a -> s {type' = a} :: SNOMEDCTAttribute)
+
+instance Data.FromJSON SNOMEDCTAttribute where
+  parseJSON =
+    Data.withObject
+      "SNOMEDCTAttribute"
+      ( \x ->
+          SNOMEDCTAttribute'
+            Prelude.<$> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "Category")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "RelationshipScore")
+            Prelude.<*> (x Data..:? "RelationshipType")
+            Prelude.<*> ( x
+                            Data..:? "SNOMEDCTConcepts"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Score")
+            Prelude.<*> (x Data..:? "Text")
+            Prelude.<*> (x Data..:? "Traits" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable SNOMEDCTAttribute where
+  hashWithSalt _salt SNOMEDCTAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` relationshipScore
+      `Prelude.hashWithSalt` relationshipType
+      `Prelude.hashWithSalt` sNOMEDCTConcepts
+      `Prelude.hashWithSalt` score
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` traits
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SNOMEDCTAttribute where
+  rnf SNOMEDCTAttribute' {..} =
+    Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf category
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf relationshipScore
+      `Prelude.seq` Prelude.rnf relationshipType
+      `Prelude.seq` Prelude.rnf sNOMEDCTConcepts
+      `Prelude.seq` Prelude.rnf score
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf traits
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTAttributeType.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTAttributeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTAttributeType.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTAttributeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTAttributeType
+  ( SNOMEDCTAttributeType
+      ( ..,
+        SNOMEDCTAttributeType_ACUITY,
+        SNOMEDCTAttributeType_DIRECTION,
+        SNOMEDCTAttributeType_QUALITY,
+        SNOMEDCTAttributeType_SYSTEM_ORGAN_SITE,
+        SNOMEDCTAttributeType_TEST_UNIT,
+        SNOMEDCTAttributeType_TEST_VALUE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SNOMEDCTAttributeType = SNOMEDCTAttributeType'
+  { fromSNOMEDCTAttributeType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SNOMEDCTAttributeType_ACUITY :: SNOMEDCTAttributeType
+pattern SNOMEDCTAttributeType_ACUITY = SNOMEDCTAttributeType' "ACUITY"
+
+pattern SNOMEDCTAttributeType_DIRECTION :: SNOMEDCTAttributeType
+pattern SNOMEDCTAttributeType_DIRECTION = SNOMEDCTAttributeType' "DIRECTION"
+
+pattern SNOMEDCTAttributeType_QUALITY :: SNOMEDCTAttributeType
+pattern SNOMEDCTAttributeType_QUALITY = SNOMEDCTAttributeType' "QUALITY"
+
+pattern SNOMEDCTAttributeType_SYSTEM_ORGAN_SITE :: SNOMEDCTAttributeType
+pattern SNOMEDCTAttributeType_SYSTEM_ORGAN_SITE = SNOMEDCTAttributeType' "SYSTEM_ORGAN_SITE"
+
+pattern SNOMEDCTAttributeType_TEST_UNIT :: SNOMEDCTAttributeType
+pattern SNOMEDCTAttributeType_TEST_UNIT = SNOMEDCTAttributeType' "TEST_UNIT"
+
+pattern SNOMEDCTAttributeType_TEST_VALUE :: SNOMEDCTAttributeType
+pattern SNOMEDCTAttributeType_TEST_VALUE = SNOMEDCTAttributeType' "TEST_VALUE"
+
+{-# COMPLETE
+  SNOMEDCTAttributeType_ACUITY,
+  SNOMEDCTAttributeType_DIRECTION,
+  SNOMEDCTAttributeType_QUALITY,
+  SNOMEDCTAttributeType_SYSTEM_ORGAN_SITE,
+  SNOMEDCTAttributeType_TEST_UNIT,
+  SNOMEDCTAttributeType_TEST_VALUE,
+  SNOMEDCTAttributeType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTConcept.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTConcept.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTConcept.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTConcept
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTConcept where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The SNOMED-CT concepts that the entity could refer to, along with a
+-- score indicating the likelihood of the match.
+--
+-- /See:/ 'newSNOMEDCTConcept' smart constructor.
+data SNOMEDCTConcept = SNOMEDCTConcept'
+  { -- | The numeric ID for the SNOMED-CT concept.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The description of the SNOMED-CT concept.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The level of confidence Comprehend Medical has that the entity should be
+    -- linked to the identified SNOMED-CT concept.
+    score :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SNOMEDCTConcept' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'sNOMEDCTConcept_code' - The numeric ID for the SNOMED-CT concept.
+--
+-- 'description', 'sNOMEDCTConcept_description' - The description of the SNOMED-CT concept.
+--
+-- 'score', 'sNOMEDCTConcept_score' - The level of confidence Comprehend Medical has that the entity should be
+-- linked to the identified SNOMED-CT concept.
+newSNOMEDCTConcept ::
+  SNOMEDCTConcept
+newSNOMEDCTConcept =
+  SNOMEDCTConcept'
+    { code = Prelude.Nothing,
+      description = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | The numeric ID for the SNOMED-CT concept.
+sNOMEDCTConcept_code :: Lens.Lens' SNOMEDCTConcept (Prelude.Maybe Prelude.Text)
+sNOMEDCTConcept_code = Lens.lens (\SNOMEDCTConcept' {code} -> code) (\s@SNOMEDCTConcept' {} a -> s {code = a} :: SNOMEDCTConcept)
+
+-- | The description of the SNOMED-CT concept.
+sNOMEDCTConcept_description :: Lens.Lens' SNOMEDCTConcept (Prelude.Maybe Prelude.Text)
+sNOMEDCTConcept_description = Lens.lens (\SNOMEDCTConcept' {description} -> description) (\s@SNOMEDCTConcept' {} a -> s {description = a} :: SNOMEDCTConcept)
+
+-- | The level of confidence Comprehend Medical has that the entity should be
+-- linked to the identified SNOMED-CT concept.
+sNOMEDCTConcept_score :: Lens.Lens' SNOMEDCTConcept (Prelude.Maybe Prelude.Double)
+sNOMEDCTConcept_score = Lens.lens (\SNOMEDCTConcept' {score} -> score) (\s@SNOMEDCTConcept' {} a -> s {score = a} :: SNOMEDCTConcept)
+
+instance Data.FromJSON SNOMEDCTConcept where
+  parseJSON =
+    Data.withObject
+      "SNOMEDCTConcept"
+      ( \x ->
+          SNOMEDCTConcept'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Score")
+      )
+
+instance Prelude.Hashable SNOMEDCTConcept where
+  hashWithSalt _salt SNOMEDCTConcept' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData SNOMEDCTConcept where
+  rnf SNOMEDCTConcept' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTDetails.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTDetails.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The information about the revision of the SNOMED-CT ontology in the
+-- response. Specifically, the details include the SNOMED-CT edition,
+-- language, and version date.
+--
+-- /See:/ 'newSNOMEDCTDetails' smart constructor.
+data SNOMEDCTDetails = SNOMEDCTDetails'
+  { -- | The edition of SNOMED-CT used. The edition used for the InferSNOMEDCT
+    -- editions is the US edition.
+    edition :: Prelude.Maybe Prelude.Text,
+    -- | The language used in the SNOMED-CT ontology. All Amazon Comprehend
+    -- Medical operations are US English (en).
+    language :: Prelude.Maybe Prelude.Text,
+    -- | The version date of the SNOMED-CT ontology used.
+    versionDate :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SNOMEDCTDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'edition', 'sNOMEDCTDetails_edition' - The edition of SNOMED-CT used. The edition used for the InferSNOMEDCT
+-- editions is the US edition.
+--
+-- 'language', 'sNOMEDCTDetails_language' - The language used in the SNOMED-CT ontology. All Amazon Comprehend
+-- Medical operations are US English (en).
+--
+-- 'versionDate', 'sNOMEDCTDetails_versionDate' - The version date of the SNOMED-CT ontology used.
+newSNOMEDCTDetails ::
+  SNOMEDCTDetails
+newSNOMEDCTDetails =
+  SNOMEDCTDetails'
+    { edition = Prelude.Nothing,
+      language = Prelude.Nothing,
+      versionDate = Prelude.Nothing
+    }
+
+-- | The edition of SNOMED-CT used. The edition used for the InferSNOMEDCT
+-- editions is the US edition.
+sNOMEDCTDetails_edition :: Lens.Lens' SNOMEDCTDetails (Prelude.Maybe Prelude.Text)
+sNOMEDCTDetails_edition = Lens.lens (\SNOMEDCTDetails' {edition} -> edition) (\s@SNOMEDCTDetails' {} a -> s {edition = a} :: SNOMEDCTDetails)
+
+-- | The language used in the SNOMED-CT ontology. All Amazon Comprehend
+-- Medical operations are US English (en).
+sNOMEDCTDetails_language :: Lens.Lens' SNOMEDCTDetails (Prelude.Maybe Prelude.Text)
+sNOMEDCTDetails_language = Lens.lens (\SNOMEDCTDetails' {language} -> language) (\s@SNOMEDCTDetails' {} a -> s {language = a} :: SNOMEDCTDetails)
+
+-- | The version date of the SNOMED-CT ontology used.
+sNOMEDCTDetails_versionDate :: Lens.Lens' SNOMEDCTDetails (Prelude.Maybe Prelude.Text)
+sNOMEDCTDetails_versionDate = Lens.lens (\SNOMEDCTDetails' {versionDate} -> versionDate) (\s@SNOMEDCTDetails' {} a -> s {versionDate = a} :: SNOMEDCTDetails)
+
+instance Data.FromJSON SNOMEDCTDetails where
+  parseJSON =
+    Data.withObject
+      "SNOMEDCTDetails"
+      ( \x ->
+          SNOMEDCTDetails'
+            Prelude.<$> (x Data..:? "Edition")
+            Prelude.<*> (x Data..:? "Language")
+            Prelude.<*> (x Data..:? "VersionDate")
+      )
+
+instance Prelude.Hashable SNOMEDCTDetails where
+  hashWithSalt _salt SNOMEDCTDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` edition
+      `Prelude.hashWithSalt` language
+      `Prelude.hashWithSalt` versionDate
+
+instance Prelude.NFData SNOMEDCTDetails where
+  rnf SNOMEDCTDetails' {..} =
+    Prelude.rnf edition
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf versionDate
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntity.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntity.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTEntity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTEntity where
+
+import Amazonka.ComprehendMedical.Types.SNOMEDCTAttribute
+import Amazonka.ComprehendMedical.Types.SNOMEDCTConcept
+import Amazonka.ComprehendMedical.Types.SNOMEDCTEntityCategory
+import Amazonka.ComprehendMedical.Types.SNOMEDCTEntityType
+import Amazonka.ComprehendMedical.Types.SNOMEDCTTrait
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The collection of medical entities extracted from the input text and
+-- their associated information. For each entity, the response provides the
+-- entity text, the entity category, where the entity text begins and ends,
+-- and the level of confidence that Comprehend Medical has in the detection
+-- and analysis. Attributes and traits of the entity are also returned.
+--
+-- /See:/ 'newSNOMEDCTEntity' smart constructor.
+data SNOMEDCTEntity = SNOMEDCTEntity'
+  { -- | An extracted segment of the text that is an attribute of an entity, or
+    -- otherwise related to an entity, such as the dosage of a medication
+    -- taken.
+    attributes :: Prelude.Maybe [SNOMEDCTAttribute],
+    -- | The 0-based character offset in the input text that shows where the
+    -- entity begins. The offset returns the UTF-8 code point in the string.
+    beginOffset :: Prelude.Maybe Prelude.Int,
+    -- | The category of the detected entity. Possible categories are
+    -- MEDICAL_CONDITION, ANATOMY, or TEST_TREATMENT_PROCEDURE.
+    category :: Prelude.Maybe SNOMEDCTEntityCategory,
+    -- | The 0-based character offset in the input text that shows where the
+    -- entity ends. The offset returns the UTF-8 code point in the string.
+    endOffset :: Prelude.Maybe Prelude.Int,
+    -- | The numeric identifier for the entity. This is a monotonically
+    -- increasing id unique within this response rather than a global unique
+    -- identifier.
+    id :: Prelude.Maybe Prelude.Int,
+    -- | The SNOMED concepts that the entity could refer to, along with a score
+    -- indicating the likelihood of the match.
+    sNOMEDCTConcepts :: Prelude.Maybe [SNOMEDCTConcept],
+    -- | The level of confidence that Comprehend Medical has in the accuracy of
+    -- the detected entity.
+    score :: Prelude.Maybe Prelude.Double,
+    -- | The segment of input text extracted as this entity.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | Contextual information for the entity.
+    traits :: Prelude.Maybe [SNOMEDCTTrait],
+    -- | Describes the specific type of entity with category of entities.
+    -- Possible types include DX_NAME, ACUITY, DIRECTION, SYSTEM_ORGAN_SITE,
+    -- TEST_NAME, TEST_VALUE, TEST_UNIT, PROCEDURE_NAME, or TREATMENT_NAME.
+    type' :: Prelude.Maybe SNOMEDCTEntityType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SNOMEDCTEntity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'sNOMEDCTEntity_attributes' - An extracted segment of the text that is an attribute of an entity, or
+-- otherwise related to an entity, such as the dosage of a medication
+-- taken.
+--
+-- 'beginOffset', 'sNOMEDCTEntity_beginOffset' - The 0-based character offset in the input text that shows where the
+-- entity begins. The offset returns the UTF-8 code point in the string.
+--
+-- 'category', 'sNOMEDCTEntity_category' - The category of the detected entity. Possible categories are
+-- MEDICAL_CONDITION, ANATOMY, or TEST_TREATMENT_PROCEDURE.
+--
+-- 'endOffset', 'sNOMEDCTEntity_endOffset' - The 0-based character offset in the input text that shows where the
+-- entity ends. The offset returns the UTF-8 code point in the string.
+--
+-- 'id', 'sNOMEDCTEntity_id' - The numeric identifier for the entity. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+--
+-- 'sNOMEDCTConcepts', 'sNOMEDCTEntity_sNOMEDCTConcepts' - The SNOMED concepts that the entity could refer to, along with a score
+-- indicating the likelihood of the match.
+--
+-- 'score', 'sNOMEDCTEntity_score' - The level of confidence that Comprehend Medical has in the accuracy of
+-- the detected entity.
+--
+-- 'text', 'sNOMEDCTEntity_text' - The segment of input text extracted as this entity.
+--
+-- 'traits', 'sNOMEDCTEntity_traits' - Contextual information for the entity.
+--
+-- 'type'', 'sNOMEDCTEntity_type' - Describes the specific type of entity with category of entities.
+-- Possible types include DX_NAME, ACUITY, DIRECTION, SYSTEM_ORGAN_SITE,
+-- TEST_NAME, TEST_VALUE, TEST_UNIT, PROCEDURE_NAME, or TREATMENT_NAME.
+newSNOMEDCTEntity ::
+  SNOMEDCTEntity
+newSNOMEDCTEntity =
+  SNOMEDCTEntity'
+    { attributes = Prelude.Nothing,
+      beginOffset = Prelude.Nothing,
+      category = Prelude.Nothing,
+      endOffset = Prelude.Nothing,
+      id = Prelude.Nothing,
+      sNOMEDCTConcepts = Prelude.Nothing,
+      score = Prelude.Nothing,
+      text = Prelude.Nothing,
+      traits = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | An extracted segment of the text that is an attribute of an entity, or
+-- otherwise related to an entity, such as the dosage of a medication
+-- taken.
+sNOMEDCTEntity_attributes :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe [SNOMEDCTAttribute])
+sNOMEDCTEntity_attributes = Lens.lens (\SNOMEDCTEntity' {attributes} -> attributes) (\s@SNOMEDCTEntity' {} a -> s {attributes = a} :: SNOMEDCTEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The 0-based character offset in the input text that shows where the
+-- entity begins. The offset returns the UTF-8 code point in the string.
+sNOMEDCTEntity_beginOffset :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Int)
+sNOMEDCTEntity_beginOffset = Lens.lens (\SNOMEDCTEntity' {beginOffset} -> beginOffset) (\s@SNOMEDCTEntity' {} a -> s {beginOffset = a} :: SNOMEDCTEntity)
+
+-- | The category of the detected entity. Possible categories are
+-- MEDICAL_CONDITION, ANATOMY, or TEST_TREATMENT_PROCEDURE.
+sNOMEDCTEntity_category :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe SNOMEDCTEntityCategory)
+sNOMEDCTEntity_category = Lens.lens (\SNOMEDCTEntity' {category} -> category) (\s@SNOMEDCTEntity' {} a -> s {category = a} :: SNOMEDCTEntity)
+
+-- | The 0-based character offset in the input text that shows where the
+-- entity ends. The offset returns the UTF-8 code point in the string.
+sNOMEDCTEntity_endOffset :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Int)
+sNOMEDCTEntity_endOffset = Lens.lens (\SNOMEDCTEntity' {endOffset} -> endOffset) (\s@SNOMEDCTEntity' {} a -> s {endOffset = a} :: SNOMEDCTEntity)
+
+-- | The numeric identifier for the entity. This is a monotonically
+-- increasing id unique within this response rather than a global unique
+-- identifier.
+sNOMEDCTEntity_id :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Int)
+sNOMEDCTEntity_id = Lens.lens (\SNOMEDCTEntity' {id} -> id) (\s@SNOMEDCTEntity' {} a -> s {id = a} :: SNOMEDCTEntity)
+
+-- | The SNOMED concepts that the entity could refer to, along with a score
+-- indicating the likelihood of the match.
+sNOMEDCTEntity_sNOMEDCTConcepts :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe [SNOMEDCTConcept])
+sNOMEDCTEntity_sNOMEDCTConcepts = Lens.lens (\SNOMEDCTEntity' {sNOMEDCTConcepts} -> sNOMEDCTConcepts) (\s@SNOMEDCTEntity' {} a -> s {sNOMEDCTConcepts = a} :: SNOMEDCTEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The level of confidence that Comprehend Medical has in the accuracy of
+-- the detected entity.
+sNOMEDCTEntity_score :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Double)
+sNOMEDCTEntity_score = Lens.lens (\SNOMEDCTEntity' {score} -> score) (\s@SNOMEDCTEntity' {} a -> s {score = a} :: SNOMEDCTEntity)
+
+-- | The segment of input text extracted as this entity.
+sNOMEDCTEntity_text :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Text)
+sNOMEDCTEntity_text = Lens.lens (\SNOMEDCTEntity' {text} -> text) (\s@SNOMEDCTEntity' {} a -> s {text = a} :: SNOMEDCTEntity)
+
+-- | Contextual information for the entity.
+sNOMEDCTEntity_traits :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe [SNOMEDCTTrait])
+sNOMEDCTEntity_traits = Lens.lens (\SNOMEDCTEntity' {traits} -> traits) (\s@SNOMEDCTEntity' {} a -> s {traits = a} :: SNOMEDCTEntity) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the specific type of entity with category of entities.
+-- Possible types include DX_NAME, ACUITY, DIRECTION, SYSTEM_ORGAN_SITE,
+-- TEST_NAME, TEST_VALUE, TEST_UNIT, PROCEDURE_NAME, or TREATMENT_NAME.
+sNOMEDCTEntity_type :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe SNOMEDCTEntityType)
+sNOMEDCTEntity_type = Lens.lens (\SNOMEDCTEntity' {type'} -> type') (\s@SNOMEDCTEntity' {} a -> s {type' = a} :: SNOMEDCTEntity)
+
+instance Data.FromJSON SNOMEDCTEntity where
+  parseJSON =
+    Data.withObject
+      "SNOMEDCTEntity"
+      ( \x ->
+          SNOMEDCTEntity'
+            Prelude.<$> (x Data..:? "Attributes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "BeginOffset")
+            Prelude.<*> (x Data..:? "Category")
+            Prelude.<*> (x Data..:? "EndOffset")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> ( x
+                            Data..:? "SNOMEDCTConcepts"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "Score")
+            Prelude.<*> (x Data..:? "Text")
+            Prelude.<*> (x Data..:? "Traits" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable SNOMEDCTEntity where
+  hashWithSalt _salt SNOMEDCTEntity' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` beginOffset
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` endOffset
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` sNOMEDCTConcepts
+      `Prelude.hashWithSalt` score
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` traits
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SNOMEDCTEntity where
+  rnf SNOMEDCTEntity' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf beginOffset
+      `Prelude.seq` Prelude.rnf category
+      `Prelude.seq` Prelude.rnf endOffset
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf sNOMEDCTConcepts
+      `Prelude.seq` Prelude.rnf score
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf traits
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntityCategory.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntityCategory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntityCategory.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTEntityCategory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTEntityCategory
+  ( SNOMEDCTEntityCategory
+      ( ..,
+        SNOMEDCTEntityCategory_ANATOMY,
+        SNOMEDCTEntityCategory_MEDICAL_CONDITION,
+        SNOMEDCTEntityCategory_TEST_TREATMENT_PROCEDURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SNOMEDCTEntityCategory = SNOMEDCTEntityCategory'
+  { fromSNOMEDCTEntityCategory ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SNOMEDCTEntityCategory_ANATOMY :: SNOMEDCTEntityCategory
+pattern SNOMEDCTEntityCategory_ANATOMY = SNOMEDCTEntityCategory' "ANATOMY"
+
+pattern SNOMEDCTEntityCategory_MEDICAL_CONDITION :: SNOMEDCTEntityCategory
+pattern SNOMEDCTEntityCategory_MEDICAL_CONDITION = SNOMEDCTEntityCategory' "MEDICAL_CONDITION"
+
+pattern SNOMEDCTEntityCategory_TEST_TREATMENT_PROCEDURE :: SNOMEDCTEntityCategory
+pattern SNOMEDCTEntityCategory_TEST_TREATMENT_PROCEDURE = SNOMEDCTEntityCategory' "TEST_TREATMENT_PROCEDURE"
+
+{-# COMPLETE
+  SNOMEDCTEntityCategory_ANATOMY,
+  SNOMEDCTEntityCategory_MEDICAL_CONDITION,
+  SNOMEDCTEntityCategory_TEST_TREATMENT_PROCEDURE,
+  SNOMEDCTEntityCategory'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntityType.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTEntityType.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTEntityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTEntityType
+  ( SNOMEDCTEntityType
+      ( ..,
+        SNOMEDCTEntityType_DX_NAME,
+        SNOMEDCTEntityType_PROCEDURE_NAME,
+        SNOMEDCTEntityType_TEST_NAME,
+        SNOMEDCTEntityType_TREATMENT_NAME
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SNOMEDCTEntityType = SNOMEDCTEntityType'
+  { fromSNOMEDCTEntityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SNOMEDCTEntityType_DX_NAME :: SNOMEDCTEntityType
+pattern SNOMEDCTEntityType_DX_NAME = SNOMEDCTEntityType' "DX_NAME"
+
+pattern SNOMEDCTEntityType_PROCEDURE_NAME :: SNOMEDCTEntityType
+pattern SNOMEDCTEntityType_PROCEDURE_NAME = SNOMEDCTEntityType' "PROCEDURE_NAME"
+
+pattern SNOMEDCTEntityType_TEST_NAME :: SNOMEDCTEntityType
+pattern SNOMEDCTEntityType_TEST_NAME = SNOMEDCTEntityType' "TEST_NAME"
+
+pattern SNOMEDCTEntityType_TREATMENT_NAME :: SNOMEDCTEntityType
+pattern SNOMEDCTEntityType_TREATMENT_NAME = SNOMEDCTEntityType' "TREATMENT_NAME"
+
+{-# COMPLETE
+  SNOMEDCTEntityType_DX_NAME,
+  SNOMEDCTEntityType_PROCEDURE_NAME,
+  SNOMEDCTEntityType_TEST_NAME,
+  SNOMEDCTEntityType_TREATMENT_NAME,
+  SNOMEDCTEntityType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTRelationshipType.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTRelationshipType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTRelationshipType.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTRelationshipType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTRelationshipType
+  ( SNOMEDCTRelationshipType
+      ( ..,
+        SNOMEDCTRelationshipType_ACUITY,
+        SNOMEDCTRelationshipType_DIRECTION,
+        SNOMEDCTRelationshipType_QUALITY,
+        SNOMEDCTRelationshipType_SYSTEM_ORGAN_SITE,
+        SNOMEDCTRelationshipType_TEST_UNITS,
+        SNOMEDCTRelationshipType_TEST_VALUE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SNOMEDCTRelationshipType = SNOMEDCTRelationshipType'
+  { fromSNOMEDCTRelationshipType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SNOMEDCTRelationshipType_ACUITY :: SNOMEDCTRelationshipType
+pattern SNOMEDCTRelationshipType_ACUITY = SNOMEDCTRelationshipType' "ACUITY"
+
+pattern SNOMEDCTRelationshipType_DIRECTION :: SNOMEDCTRelationshipType
+pattern SNOMEDCTRelationshipType_DIRECTION = SNOMEDCTRelationshipType' "DIRECTION"
+
+pattern SNOMEDCTRelationshipType_QUALITY :: SNOMEDCTRelationshipType
+pattern SNOMEDCTRelationshipType_QUALITY = SNOMEDCTRelationshipType' "QUALITY"
+
+pattern SNOMEDCTRelationshipType_SYSTEM_ORGAN_SITE :: SNOMEDCTRelationshipType
+pattern SNOMEDCTRelationshipType_SYSTEM_ORGAN_SITE = SNOMEDCTRelationshipType' "SYSTEM_ORGAN_SITE"
+
+pattern SNOMEDCTRelationshipType_TEST_UNITS :: SNOMEDCTRelationshipType
+pattern SNOMEDCTRelationshipType_TEST_UNITS = SNOMEDCTRelationshipType' "TEST_UNITS"
+
+pattern SNOMEDCTRelationshipType_TEST_VALUE :: SNOMEDCTRelationshipType
+pattern SNOMEDCTRelationshipType_TEST_VALUE = SNOMEDCTRelationshipType' "TEST_VALUE"
+
+{-# COMPLETE
+  SNOMEDCTRelationshipType_ACUITY,
+  SNOMEDCTRelationshipType_DIRECTION,
+  SNOMEDCTRelationshipType_QUALITY,
+  SNOMEDCTRelationshipType_SYSTEM_ORGAN_SITE,
+  SNOMEDCTRelationshipType_TEST_UNITS,
+  SNOMEDCTRelationshipType_TEST_VALUE,
+  SNOMEDCTRelationshipType'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTTrait.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTTrait.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTTrait.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTTrait
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTTrait where
+
+import Amazonka.ComprehendMedical.Types.SNOMEDCTTraitName
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contextual information for an entity.
+--
+-- /See:/ 'newSNOMEDCTTrait' smart constructor.
+data SNOMEDCTTrait = SNOMEDCTTrait'
+  { -- | The name or contextual description of a detected trait.
+    name :: Prelude.Maybe SNOMEDCTTraitName,
+    -- | The level of confidence that Comprehend Medical has in the accuracy of a
+    -- detected trait.
+    score :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SNOMEDCTTrait' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'sNOMEDCTTrait_name' - The name or contextual description of a detected trait.
+--
+-- 'score', 'sNOMEDCTTrait_score' - The level of confidence that Comprehend Medical has in the accuracy of a
+-- detected trait.
+newSNOMEDCTTrait ::
+  SNOMEDCTTrait
+newSNOMEDCTTrait =
+  SNOMEDCTTrait'
+    { name = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | The name or contextual description of a detected trait.
+sNOMEDCTTrait_name :: Lens.Lens' SNOMEDCTTrait (Prelude.Maybe SNOMEDCTTraitName)
+sNOMEDCTTrait_name = Lens.lens (\SNOMEDCTTrait' {name} -> name) (\s@SNOMEDCTTrait' {} a -> s {name = a} :: SNOMEDCTTrait)
+
+-- | The level of confidence that Comprehend Medical has in the accuracy of a
+-- detected trait.
+sNOMEDCTTrait_score :: Lens.Lens' SNOMEDCTTrait (Prelude.Maybe Prelude.Double)
+sNOMEDCTTrait_score = Lens.lens (\SNOMEDCTTrait' {score} -> score) (\s@SNOMEDCTTrait' {} a -> s {score = a} :: SNOMEDCTTrait)
+
+instance Data.FromJSON SNOMEDCTTrait where
+  parseJSON =
+    Data.withObject
+      "SNOMEDCTTrait"
+      ( \x ->
+          SNOMEDCTTrait'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Score")
+      )
+
+instance Prelude.Hashable SNOMEDCTTrait where
+  hashWithSalt _salt SNOMEDCTTrait' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData SNOMEDCTTrait where
+  rnf SNOMEDCTTrait' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTTraitName.hs b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTTraitName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/SNOMEDCTTraitName.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTTraitName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.SNOMEDCTTraitName
+  ( SNOMEDCTTraitName
+      ( ..,
+        SNOMEDCTTraitName_DIAGNOSIS,
+        SNOMEDCTTraitName_FUTURE,
+        SNOMEDCTTraitName_HYPOTHETICAL,
+        SNOMEDCTTraitName_LOW_CONFIDENCE,
+        SNOMEDCTTraitName_NEGATION,
+        SNOMEDCTTraitName_PAST_HISTORY,
+        SNOMEDCTTraitName_PERTAINS_TO_FAMILY,
+        SNOMEDCTTraitName_SIGN,
+        SNOMEDCTTraitName_SYMPTOM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SNOMEDCTTraitName = SNOMEDCTTraitName'
+  { fromSNOMEDCTTraitName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SNOMEDCTTraitName_DIAGNOSIS :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_DIAGNOSIS = SNOMEDCTTraitName' "DIAGNOSIS"
+
+pattern SNOMEDCTTraitName_FUTURE :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_FUTURE = SNOMEDCTTraitName' "FUTURE"
+
+pattern SNOMEDCTTraitName_HYPOTHETICAL :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_HYPOTHETICAL = SNOMEDCTTraitName' "HYPOTHETICAL"
+
+pattern SNOMEDCTTraitName_LOW_CONFIDENCE :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_LOW_CONFIDENCE = SNOMEDCTTraitName' "LOW_CONFIDENCE"
+
+pattern SNOMEDCTTraitName_NEGATION :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_NEGATION = SNOMEDCTTraitName' "NEGATION"
+
+pattern SNOMEDCTTraitName_PAST_HISTORY :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_PAST_HISTORY = SNOMEDCTTraitName' "PAST_HISTORY"
+
+pattern SNOMEDCTTraitName_PERTAINS_TO_FAMILY :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_PERTAINS_TO_FAMILY = SNOMEDCTTraitName' "PERTAINS_TO_FAMILY"
+
+pattern SNOMEDCTTraitName_SIGN :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_SIGN = SNOMEDCTTraitName' "SIGN"
+
+pattern SNOMEDCTTraitName_SYMPTOM :: SNOMEDCTTraitName
+pattern SNOMEDCTTraitName_SYMPTOM = SNOMEDCTTraitName' "SYMPTOM"
+
+{-# COMPLETE
+  SNOMEDCTTraitName_DIAGNOSIS,
+  SNOMEDCTTraitName_FUTURE,
+  SNOMEDCTTraitName_HYPOTHETICAL,
+  SNOMEDCTTraitName_LOW_CONFIDENCE,
+  SNOMEDCTTraitName_NEGATION,
+  SNOMEDCTTraitName_PAST_HISTORY,
+  SNOMEDCTTraitName_PERTAINS_TO_FAMILY,
+  SNOMEDCTTraitName_SIGN,
+  SNOMEDCTTraitName_SYMPTOM,
+  SNOMEDCTTraitName'
+  #-}
diff --git a/gen/Amazonka/ComprehendMedical/Types/Trait.hs b/gen/Amazonka/ComprehendMedical/Types/Trait.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/Trait.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.Trait
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.Trait where
+
+import Amazonka.ComprehendMedical.Types.AttributeName
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides contextual information about the extracted entity.
+--
+-- /See:/ 'newTrait' smart constructor.
+data Trait = Trait'
+  { -- | Provides a name or contextual description about the trait.
+    name :: Prelude.Maybe AttributeName,
+    -- | The level of confidence that Comprehend Medical; has in the accuracy of
+    -- this trait.
+    score :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Trait' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'trait_name' - Provides a name or contextual description about the trait.
+--
+-- 'score', 'trait_score' - The level of confidence that Comprehend Medical; has in the accuracy of
+-- this trait.
+newTrait ::
+  Trait
+newTrait =
+  Trait'
+    { name = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | Provides a name or contextual description about the trait.
+trait_name :: Lens.Lens' Trait (Prelude.Maybe AttributeName)
+trait_name = Lens.lens (\Trait' {name} -> name) (\s@Trait' {} a -> s {name = a} :: Trait)
+
+-- | The level of confidence that Comprehend Medical; has in the accuracy of
+-- this trait.
+trait_score :: Lens.Lens' Trait (Prelude.Maybe Prelude.Double)
+trait_score = Lens.lens (\Trait' {score} -> score) (\s@Trait' {} a -> s {score = a} :: Trait)
+
+instance Data.FromJSON Trait where
+  parseJSON =
+    Data.withObject
+      "Trait"
+      ( \x ->
+          Trait'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Score")
+      )
+
+instance Prelude.Hashable Trait where
+  hashWithSalt _salt Trait' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData Trait where
+  rnf Trait' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/ComprehendMedical/Types/UnmappedAttribute.hs b/gen/Amazonka/ComprehendMedical/Types/UnmappedAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Types/UnmappedAttribute.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Types.UnmappedAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Types.UnmappedAttribute where
+
+import Amazonka.ComprehendMedical.Types.Attribute
+import Amazonka.ComprehendMedical.Types.EntityType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An attribute that was extracted, but Comprehend Medical; was unable to
+-- relate to an entity.
+--
+-- /See:/ 'newUnmappedAttribute' smart constructor.
+data UnmappedAttribute = UnmappedAttribute'
+  { -- | The specific attribute that has been extracted but not mapped to an
+    -- entity.
+    attribute :: Prelude.Maybe Attribute,
+    -- | The type of the unmapped attribute, could be one of the following
+    -- values: \"MEDICATION\", \"MEDICAL_CONDITION\", \"ANATOMY\",
+    -- \"TEST_AND_TREATMENT_PROCEDURE\" or \"PROTECTED_HEALTH_INFORMATION\".
+    type' :: Prelude.Maybe EntityType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnmappedAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attribute', 'unmappedAttribute_attribute' - The specific attribute that has been extracted but not mapped to an
+-- entity.
+--
+-- 'type'', 'unmappedAttribute_type' - The type of the unmapped attribute, could be one of the following
+-- values: \"MEDICATION\", \"MEDICAL_CONDITION\", \"ANATOMY\",
+-- \"TEST_AND_TREATMENT_PROCEDURE\" or \"PROTECTED_HEALTH_INFORMATION\".
+newUnmappedAttribute ::
+  UnmappedAttribute
+newUnmappedAttribute =
+  UnmappedAttribute'
+    { attribute = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The specific attribute that has been extracted but not mapped to an
+-- entity.
+unmappedAttribute_attribute :: Lens.Lens' UnmappedAttribute (Prelude.Maybe Attribute)
+unmappedAttribute_attribute = Lens.lens (\UnmappedAttribute' {attribute} -> attribute) (\s@UnmappedAttribute' {} a -> s {attribute = a} :: UnmappedAttribute)
+
+-- | The type of the unmapped attribute, could be one of the following
+-- values: \"MEDICATION\", \"MEDICAL_CONDITION\", \"ANATOMY\",
+-- \"TEST_AND_TREATMENT_PROCEDURE\" or \"PROTECTED_HEALTH_INFORMATION\".
+unmappedAttribute_type :: Lens.Lens' UnmappedAttribute (Prelude.Maybe EntityType)
+unmappedAttribute_type = Lens.lens (\UnmappedAttribute' {type'} -> type') (\s@UnmappedAttribute' {} a -> s {type' = a} :: UnmappedAttribute)
+
+instance Data.FromJSON UnmappedAttribute where
+  parseJSON =
+    Data.withObject
+      "UnmappedAttribute"
+      ( \x ->
+          UnmappedAttribute'
+            Prelude.<$> (x Data..:? "Attribute")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable UnmappedAttribute where
+  hashWithSalt _salt UnmappedAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData UnmappedAttribute where
+  rnf UnmappedAttribute' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ComprehendMedical/Waiters.hs b/gen/Amazonka/ComprehendMedical/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ComprehendMedical/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ComprehendMedical.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ComprehendMedical.Waiters where
+
+import Amazonka.ComprehendMedical.Lens
+import Amazonka.ComprehendMedical.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.ComprehendMedical
+import Test.Amazonka.ComprehendMedical.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ComprehendMedical"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/ComprehendMedical.hs b/test/Test/Amazonka/ComprehendMedical.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ComprehendMedical.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ComprehendMedical
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.ComprehendMedical
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ComprehendMedical/Internal.hs b/test/Test/Amazonka/ComprehendMedical/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ComprehendMedical/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ComprehendMedical.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.ComprehendMedical.Internal where
diff --git a/test/Test/Amazonka/Gen/ComprehendMedical.hs b/test/Test/Amazonka/Gen/ComprehendMedical.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ComprehendMedical.hs
@@ -0,0 +1,538 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.ComprehendMedical
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.ComprehendMedical where
+
+import Amazonka.ComprehendMedical
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.ComprehendMedical.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestDescribeEntitiesDetectionV2Job $
+--             newDescribeEntitiesDetectionV2Job
+--
+--         , requestDescribeICD10CMInferenceJob $
+--             newDescribeICD10CMInferenceJob
+--
+--         , requestDescribePHIDetectionJob $
+--             newDescribePHIDetectionJob
+--
+--         , requestDescribeRxNormInferenceJob $
+--             newDescribeRxNormInferenceJob
+--
+--         , requestDescribeSNOMEDCTInferenceJob $
+--             newDescribeSNOMEDCTInferenceJob
+--
+--         , requestDetectEntitiesV2 $
+--             newDetectEntitiesV2
+--
+--         , requestDetectPHI $
+--             newDetectPHI
+--
+--         , requestInferICD10CM $
+--             newInferICD10CM
+--
+--         , requestInferRxNorm $
+--             newInferRxNorm
+--
+--         , requestInferSNOMEDCT $
+--             newInferSNOMEDCT
+--
+--         , requestListEntitiesDetectionV2Jobs $
+--             newListEntitiesDetectionV2Jobs
+--
+--         , requestListICD10CMInferenceJobs $
+--             newListICD10CMInferenceJobs
+--
+--         , requestListPHIDetectionJobs $
+--             newListPHIDetectionJobs
+--
+--         , requestListRxNormInferenceJobs $
+--             newListRxNormInferenceJobs
+--
+--         , requestListSNOMEDCTInferenceJobs $
+--             newListSNOMEDCTInferenceJobs
+--
+--         , requestStartEntitiesDetectionV2Job $
+--             newStartEntitiesDetectionV2Job
+--
+--         , requestStartICD10CMInferenceJob $
+--             newStartICD10CMInferenceJob
+--
+--         , requestStartPHIDetectionJob $
+--             newStartPHIDetectionJob
+--
+--         , requestStartRxNormInferenceJob $
+--             newStartRxNormInferenceJob
+--
+--         , requestStartSNOMEDCTInferenceJob $
+--             newStartSNOMEDCTInferenceJob
+--
+--         , requestStopEntitiesDetectionV2Job $
+--             newStopEntitiesDetectionV2Job
+--
+--         , requestStopICD10CMInferenceJob $
+--             newStopICD10CMInferenceJob
+--
+--         , requestStopPHIDetectionJob $
+--             newStopPHIDetectionJob
+--
+--         , requestStopRxNormInferenceJob $
+--             newStopRxNormInferenceJob
+--
+--         , requestStopSNOMEDCTInferenceJob $
+--             newStopSNOMEDCTInferenceJob
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseDescribeEntitiesDetectionV2Job $
+--             newDescribeEntitiesDetectionV2JobResponse
+--
+--         , responseDescribeICD10CMInferenceJob $
+--             newDescribeICD10CMInferenceJobResponse
+--
+--         , responseDescribePHIDetectionJob $
+--             newDescribePHIDetectionJobResponse
+--
+--         , responseDescribeRxNormInferenceJob $
+--             newDescribeRxNormInferenceJobResponse
+--
+--         , responseDescribeSNOMEDCTInferenceJob $
+--             newDescribeSNOMEDCTInferenceJobResponse
+--
+--         , responseDetectEntitiesV2 $
+--             newDetectEntitiesV2Response
+--
+--         , responseDetectPHI $
+--             newDetectPHIResponse
+--
+--         , responseInferICD10CM $
+--             newInferICD10CMResponse
+--
+--         , responseInferRxNorm $
+--             newInferRxNormResponse
+--
+--         , responseInferSNOMEDCT $
+--             newInferSNOMEDCTResponse
+--
+--         , responseListEntitiesDetectionV2Jobs $
+--             newListEntitiesDetectionV2JobsResponse
+--
+--         , responseListICD10CMInferenceJobs $
+--             newListICD10CMInferenceJobsResponse
+--
+--         , responseListPHIDetectionJobs $
+--             newListPHIDetectionJobsResponse
+--
+--         , responseListRxNormInferenceJobs $
+--             newListRxNormInferenceJobsResponse
+--
+--         , responseListSNOMEDCTInferenceJobs $
+--             newListSNOMEDCTInferenceJobsResponse
+--
+--         , responseStartEntitiesDetectionV2Job $
+--             newStartEntitiesDetectionV2JobResponse
+--
+--         , responseStartICD10CMInferenceJob $
+--             newStartICD10CMInferenceJobResponse
+--
+--         , responseStartPHIDetectionJob $
+--             newStartPHIDetectionJobResponse
+--
+--         , responseStartRxNormInferenceJob $
+--             newStartRxNormInferenceJobResponse
+--
+--         , responseStartSNOMEDCTInferenceJob $
+--             newStartSNOMEDCTInferenceJobResponse
+--
+--         , responseStopEntitiesDetectionV2Job $
+--             newStopEntitiesDetectionV2JobResponse
+--
+--         , responseStopICD10CMInferenceJob $
+--             newStopICD10CMInferenceJobResponse
+--
+--         , responseStopPHIDetectionJob $
+--             newStopPHIDetectionJobResponse
+--
+--         , responseStopRxNormInferenceJob $
+--             newStopRxNormInferenceJobResponse
+--
+--         , responseStopSNOMEDCTInferenceJob $
+--             newStopSNOMEDCTInferenceJobResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestDescribeEntitiesDetectionV2Job :: DescribeEntitiesDetectionV2Job -> TestTree
+requestDescribeEntitiesDetectionV2Job =
+  req
+    "DescribeEntitiesDetectionV2Job"
+    "fixture/DescribeEntitiesDetectionV2Job.yaml"
+
+requestDescribeICD10CMInferenceJob :: DescribeICD10CMInferenceJob -> TestTree
+requestDescribeICD10CMInferenceJob =
+  req
+    "DescribeICD10CMInferenceJob"
+    "fixture/DescribeICD10CMInferenceJob.yaml"
+
+requestDescribePHIDetectionJob :: DescribePHIDetectionJob -> TestTree
+requestDescribePHIDetectionJob =
+  req
+    "DescribePHIDetectionJob"
+    "fixture/DescribePHIDetectionJob.yaml"
+
+requestDescribeRxNormInferenceJob :: DescribeRxNormInferenceJob -> TestTree
+requestDescribeRxNormInferenceJob =
+  req
+    "DescribeRxNormInferenceJob"
+    "fixture/DescribeRxNormInferenceJob.yaml"
+
+requestDescribeSNOMEDCTInferenceJob :: DescribeSNOMEDCTInferenceJob -> TestTree
+requestDescribeSNOMEDCTInferenceJob =
+  req
+    "DescribeSNOMEDCTInferenceJob"
+    "fixture/DescribeSNOMEDCTInferenceJob.yaml"
+
+requestDetectEntitiesV2 :: DetectEntitiesV2 -> TestTree
+requestDetectEntitiesV2 =
+  req
+    "DetectEntitiesV2"
+    "fixture/DetectEntitiesV2.yaml"
+
+requestDetectPHI :: DetectPHI -> TestTree
+requestDetectPHI =
+  req
+    "DetectPHI"
+    "fixture/DetectPHI.yaml"
+
+requestInferICD10CM :: InferICD10CM -> TestTree
+requestInferICD10CM =
+  req
+    "InferICD10CM"
+    "fixture/InferICD10CM.yaml"
+
+requestInferRxNorm :: InferRxNorm -> TestTree
+requestInferRxNorm =
+  req
+    "InferRxNorm"
+    "fixture/InferRxNorm.yaml"
+
+requestInferSNOMEDCT :: InferSNOMEDCT -> TestTree
+requestInferSNOMEDCT =
+  req
+    "InferSNOMEDCT"
+    "fixture/InferSNOMEDCT.yaml"
+
+requestListEntitiesDetectionV2Jobs :: ListEntitiesDetectionV2Jobs -> TestTree
+requestListEntitiesDetectionV2Jobs =
+  req
+    "ListEntitiesDetectionV2Jobs"
+    "fixture/ListEntitiesDetectionV2Jobs.yaml"
+
+requestListICD10CMInferenceJobs :: ListICD10CMInferenceJobs -> TestTree
+requestListICD10CMInferenceJobs =
+  req
+    "ListICD10CMInferenceJobs"
+    "fixture/ListICD10CMInferenceJobs.yaml"
+
+requestListPHIDetectionJobs :: ListPHIDetectionJobs -> TestTree
+requestListPHIDetectionJobs =
+  req
+    "ListPHIDetectionJobs"
+    "fixture/ListPHIDetectionJobs.yaml"
+
+requestListRxNormInferenceJobs :: ListRxNormInferenceJobs -> TestTree
+requestListRxNormInferenceJobs =
+  req
+    "ListRxNormInferenceJobs"
+    "fixture/ListRxNormInferenceJobs.yaml"
+
+requestListSNOMEDCTInferenceJobs :: ListSNOMEDCTInferenceJobs -> TestTree
+requestListSNOMEDCTInferenceJobs =
+  req
+    "ListSNOMEDCTInferenceJobs"
+    "fixture/ListSNOMEDCTInferenceJobs.yaml"
+
+requestStartEntitiesDetectionV2Job :: StartEntitiesDetectionV2Job -> TestTree
+requestStartEntitiesDetectionV2Job =
+  req
+    "StartEntitiesDetectionV2Job"
+    "fixture/StartEntitiesDetectionV2Job.yaml"
+
+requestStartICD10CMInferenceJob :: StartICD10CMInferenceJob -> TestTree
+requestStartICD10CMInferenceJob =
+  req
+    "StartICD10CMInferenceJob"
+    "fixture/StartICD10CMInferenceJob.yaml"
+
+requestStartPHIDetectionJob :: StartPHIDetectionJob -> TestTree
+requestStartPHIDetectionJob =
+  req
+    "StartPHIDetectionJob"
+    "fixture/StartPHIDetectionJob.yaml"
+
+requestStartRxNormInferenceJob :: StartRxNormInferenceJob -> TestTree
+requestStartRxNormInferenceJob =
+  req
+    "StartRxNormInferenceJob"
+    "fixture/StartRxNormInferenceJob.yaml"
+
+requestStartSNOMEDCTInferenceJob :: StartSNOMEDCTInferenceJob -> TestTree
+requestStartSNOMEDCTInferenceJob =
+  req
+    "StartSNOMEDCTInferenceJob"
+    "fixture/StartSNOMEDCTInferenceJob.yaml"
+
+requestStopEntitiesDetectionV2Job :: StopEntitiesDetectionV2Job -> TestTree
+requestStopEntitiesDetectionV2Job =
+  req
+    "StopEntitiesDetectionV2Job"
+    "fixture/StopEntitiesDetectionV2Job.yaml"
+
+requestStopICD10CMInferenceJob :: StopICD10CMInferenceJob -> TestTree
+requestStopICD10CMInferenceJob =
+  req
+    "StopICD10CMInferenceJob"
+    "fixture/StopICD10CMInferenceJob.yaml"
+
+requestStopPHIDetectionJob :: StopPHIDetectionJob -> TestTree
+requestStopPHIDetectionJob =
+  req
+    "StopPHIDetectionJob"
+    "fixture/StopPHIDetectionJob.yaml"
+
+requestStopRxNormInferenceJob :: StopRxNormInferenceJob -> TestTree
+requestStopRxNormInferenceJob =
+  req
+    "StopRxNormInferenceJob"
+    "fixture/StopRxNormInferenceJob.yaml"
+
+requestStopSNOMEDCTInferenceJob :: StopSNOMEDCTInferenceJob -> TestTree
+requestStopSNOMEDCTInferenceJob =
+  req
+    "StopSNOMEDCTInferenceJob"
+    "fixture/StopSNOMEDCTInferenceJob.yaml"
+
+-- Responses
+
+responseDescribeEntitiesDetectionV2Job :: DescribeEntitiesDetectionV2JobResponse -> TestTree
+responseDescribeEntitiesDetectionV2Job =
+  res
+    "DescribeEntitiesDetectionV2JobResponse"
+    "fixture/DescribeEntitiesDetectionV2JobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEntitiesDetectionV2Job)
+
+responseDescribeICD10CMInferenceJob :: DescribeICD10CMInferenceJobResponse -> TestTree
+responseDescribeICD10CMInferenceJob =
+  res
+    "DescribeICD10CMInferenceJobResponse"
+    "fixture/DescribeICD10CMInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeICD10CMInferenceJob)
+
+responseDescribePHIDetectionJob :: DescribePHIDetectionJobResponse -> TestTree
+responseDescribePHIDetectionJob =
+  res
+    "DescribePHIDetectionJobResponse"
+    "fixture/DescribePHIDetectionJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePHIDetectionJob)
+
+responseDescribeRxNormInferenceJob :: DescribeRxNormInferenceJobResponse -> TestTree
+responseDescribeRxNormInferenceJob =
+  res
+    "DescribeRxNormInferenceJobResponse"
+    "fixture/DescribeRxNormInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRxNormInferenceJob)
+
+responseDescribeSNOMEDCTInferenceJob :: DescribeSNOMEDCTInferenceJobResponse -> TestTree
+responseDescribeSNOMEDCTInferenceJob =
+  res
+    "DescribeSNOMEDCTInferenceJobResponse"
+    "fixture/DescribeSNOMEDCTInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSNOMEDCTInferenceJob)
+
+responseDetectEntitiesV2 :: DetectEntitiesV2Response -> TestTree
+responseDetectEntitiesV2 =
+  res
+    "DetectEntitiesV2Response"
+    "fixture/DetectEntitiesV2Response.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetectEntitiesV2)
+
+responseDetectPHI :: DetectPHIResponse -> TestTree
+responseDetectPHI =
+  res
+    "DetectPHIResponse"
+    "fixture/DetectPHIResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetectPHI)
+
+responseInferICD10CM :: InferICD10CMResponse -> TestTree
+responseInferICD10CM =
+  res
+    "InferICD10CMResponse"
+    "fixture/InferICD10CMResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy InferICD10CM)
+
+responseInferRxNorm :: InferRxNormResponse -> TestTree
+responseInferRxNorm =
+  res
+    "InferRxNormResponse"
+    "fixture/InferRxNormResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy InferRxNorm)
+
+responseInferSNOMEDCT :: InferSNOMEDCTResponse -> TestTree
+responseInferSNOMEDCT =
+  res
+    "InferSNOMEDCTResponse"
+    "fixture/InferSNOMEDCTResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy InferSNOMEDCT)
+
+responseListEntitiesDetectionV2Jobs :: ListEntitiesDetectionV2JobsResponse -> TestTree
+responseListEntitiesDetectionV2Jobs =
+  res
+    "ListEntitiesDetectionV2JobsResponse"
+    "fixture/ListEntitiesDetectionV2JobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEntitiesDetectionV2Jobs)
+
+responseListICD10CMInferenceJobs :: ListICD10CMInferenceJobsResponse -> TestTree
+responseListICD10CMInferenceJobs =
+  res
+    "ListICD10CMInferenceJobsResponse"
+    "fixture/ListICD10CMInferenceJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListICD10CMInferenceJobs)
+
+responseListPHIDetectionJobs :: ListPHIDetectionJobsResponse -> TestTree
+responseListPHIDetectionJobs =
+  res
+    "ListPHIDetectionJobsResponse"
+    "fixture/ListPHIDetectionJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPHIDetectionJobs)
+
+responseListRxNormInferenceJobs :: ListRxNormInferenceJobsResponse -> TestTree
+responseListRxNormInferenceJobs =
+  res
+    "ListRxNormInferenceJobsResponse"
+    "fixture/ListRxNormInferenceJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRxNormInferenceJobs)
+
+responseListSNOMEDCTInferenceJobs :: ListSNOMEDCTInferenceJobsResponse -> TestTree
+responseListSNOMEDCTInferenceJobs =
+  res
+    "ListSNOMEDCTInferenceJobsResponse"
+    "fixture/ListSNOMEDCTInferenceJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSNOMEDCTInferenceJobs)
+
+responseStartEntitiesDetectionV2Job :: StartEntitiesDetectionV2JobResponse -> TestTree
+responseStartEntitiesDetectionV2Job =
+  res
+    "StartEntitiesDetectionV2JobResponse"
+    "fixture/StartEntitiesDetectionV2JobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartEntitiesDetectionV2Job)
+
+responseStartICD10CMInferenceJob :: StartICD10CMInferenceJobResponse -> TestTree
+responseStartICD10CMInferenceJob =
+  res
+    "StartICD10CMInferenceJobResponse"
+    "fixture/StartICD10CMInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartICD10CMInferenceJob)
+
+responseStartPHIDetectionJob :: StartPHIDetectionJobResponse -> TestTree
+responseStartPHIDetectionJob =
+  res
+    "StartPHIDetectionJobResponse"
+    "fixture/StartPHIDetectionJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartPHIDetectionJob)
+
+responseStartRxNormInferenceJob :: StartRxNormInferenceJobResponse -> TestTree
+responseStartRxNormInferenceJob =
+  res
+    "StartRxNormInferenceJobResponse"
+    "fixture/StartRxNormInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartRxNormInferenceJob)
+
+responseStartSNOMEDCTInferenceJob :: StartSNOMEDCTInferenceJobResponse -> TestTree
+responseStartSNOMEDCTInferenceJob =
+  res
+    "StartSNOMEDCTInferenceJobResponse"
+    "fixture/StartSNOMEDCTInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartSNOMEDCTInferenceJob)
+
+responseStopEntitiesDetectionV2Job :: StopEntitiesDetectionV2JobResponse -> TestTree
+responseStopEntitiesDetectionV2Job =
+  res
+    "StopEntitiesDetectionV2JobResponse"
+    "fixture/StopEntitiesDetectionV2JobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopEntitiesDetectionV2Job)
+
+responseStopICD10CMInferenceJob :: StopICD10CMInferenceJobResponse -> TestTree
+responseStopICD10CMInferenceJob =
+  res
+    "StopICD10CMInferenceJobResponse"
+    "fixture/StopICD10CMInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopICD10CMInferenceJob)
+
+responseStopPHIDetectionJob :: StopPHIDetectionJobResponse -> TestTree
+responseStopPHIDetectionJob =
+  res
+    "StopPHIDetectionJobResponse"
+    "fixture/StopPHIDetectionJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopPHIDetectionJob)
+
+responseStopRxNormInferenceJob :: StopRxNormInferenceJobResponse -> TestTree
+responseStopRxNormInferenceJob =
+  res
+    "StopRxNormInferenceJobResponse"
+    "fixture/StopRxNormInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopRxNormInferenceJob)
+
+responseStopSNOMEDCTInferenceJob :: StopSNOMEDCTInferenceJobResponse -> TestTree
+responseStopSNOMEDCTInferenceJob =
+  res
+    "StopSNOMEDCTInferenceJobResponse"
+    "fixture/StopSNOMEDCTInferenceJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopSNOMEDCTInferenceJob)
