ICD-10-PCS
Column | Data Type | Description |
---|
What is ICD-10-PCS?β
ICD-10-PCS stands for International Classification of Diseases, 10th Revision, Procedure Coding System. It is the U.S. procedural coding system developed by the Centers for Medicare & Medicaid Services (CMS) for use in inpatient hospital settings.
- Maintained by: Centers for Medicare & Medicaid Services (CMS)
- Purpose: Enables standardized coding of medical procedures performed in inpatient facilities
- Usage: Hospital billing, DRG assignment, reimbursement, clinical research, utilization review, and quality reporting
Who Maintains ICD-10-PCS?β
The ICD-10 Coordination and Maintenance Committee coordinates and maintains the ICD-10-PCS code sets, with final decisions on code revisions made by the Department of Health and Human Services (HHS)
- Updates are released bi-annually, on April 1 and October 1
π ICD-10-PCS Updates and Information
π ICD-10-PCS Official Guidelines for Coding and Reporting
Code Structureβ
Each ICD-10-PCS code:
- Is alphanumeric and always 7 characters long
- Each character position represents a specific axis of classification:
- Section (e.g., Medical and Surgical)
- Body System (e.g., Heart and Great Vessels)
- Root Operation (e.g., Bypass, Resection)
- Body Part
- Approach
- Device
- Qualifier
π ICD-10-PCS Web-Based Training
Example:β
027034Z
β Dilation of coronary artery, one artery, with drug-eluting intraluminal device, percutaneous approach
Key Use Cases for ICD-10-PCS Codesβ
- Inpatient Billing & Reimbursement: Required for hospital claims submitted to Medicare and most commercial payers
- DRG Assignment: Used to group hospital stays into MS-DRGs for payment
- Utilization & Quality Analysis: Helps track surgical procedures and outcomes
- Clinical Research: Enables studies based on coded interventions
π Notes for Data Analysts
- ICD-10-PCS codes are always 7 characters and should not contain periods
- Hierarchical classification often requires using the Section, Root Operation, and Body System positions
Tuva Seed File Update Processβ
Note: This is the maintenance process used by Tuva to maintain the current codeset in the Tuva package. Tuva users do not need to complete this step unless they are leveraging a different version of codes or are no longer updating to the current version of the project, but need an updated terminology set.
- Navigate to the CMS ICD 10 website
- Go to the ICD-10 Files section, click the section for ICD-10-CM & PCS files of the current fiscal year (e.g. 2025 ICD-10 CM & PCS)
- After that go to the ICD-10-PCS files section, and click the hyperlink for "ICD-10-PCS Codes File"
- Unzip the downloaded file and open βicd10pcs_codes_{year}β
- Save the "icd10pcs_codes_{year}" as a text file
- Load the text file into the below python script:
Since the text file contains fixed-length fields, the following Python script can be used to convert it into a CSV file.
import pandas as pd
#This function converts the text file into a dataframe with single field 'Text'
def text_to_dataframe(input_file):
with open(input_file, 'r', encoding='utf-8') as file:
lines = file.readlines()
df = pd.DataFrame({'Text': lines})
df['Text'] = df['Text'].str.strip('\n')
return df
def main():
input_filename = "your text file path"
output_filename = "output csv file path"
df = text_to_dataframe(input_filename)
#Slices the single column dataframe into dataframe with required columns
df['icd_10_pcs'] = df['Text'].str.slice(0,7)
df['description'] = df['Text'].str.slice(7,)
print(df[['icd_10_pcs','description']].head())
df2 = df[['icd_10_pcs','description']]
# Remove leading/trailing whitespace from all string columns
df2 = df2.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
df2.to_csv(output_filename, index=False)
if __name__ == "__main__":
main()
Note: You might need to adjust the slicing indexes according to the length of your data field
- Import the CSV file into any data warehouse and upload the CSV file from the data warehouse to S3 (credentials with write permissions to the S3 bucket are required)
-- example code for Snowflake
copy into s3://tuva-public-resources/terminology/icd_10_pcs.csv
from [table_created_in_step_6]
file_format = (type = csv field_optionally_enclosed_by = '"')
storage_integration = [integration_with_s3_write_permissions]
OVERWRITE = TRUE;
- Create a branch in docs. Update the
last_updated
column in the table above with the current date - Submit a pull request
The below steps are only required if the headers of the file need to be changed. The Tuva Project does not store the contents of the ICD-10-PCS file in GitHub.
- Create a branch in The Tuva Project
- Alter the headers as needed in ICD-10-PCS file
- Submit a pull request