Here is the sample query to get all the tables in Oracle fusion.
SELECT table_name
FROM all_tables
WHERE owner = 'FUSION';
Here is the sample query to get all the tables in Oracle fusion.
SELECT table_name
FROM all_tables
WHERE owner = 'FUSION';
Here is the sample query to get the metadata details for the Oracle tables.
Note : Please modify as per your requirements accordingly.
SELECT atc.table_name, atc.column_name, atc.*
FROM all_tab_columns atc
WHERE column_name LIKE '%EMPLOYEE%' OR column_name LIKE '%PERSON%';
Oracle Fusion HCM (Human Capital Management) is a comprehensive suite of HR tools.
Here are some common examples of tables in Oracle Fusion HCM:
Here is the sample SQL Query for Oracle Fusion HCM. These queries will help to retrieve the basic information related to the employee payroll information.
This is the basic query, use this table accordingly and modify as per your requirements.
SQL Query :
SELECT
ppf.person_number,
ppf.full_name,
pap.assignment_number,
ppa.payroll_name,
ppa.element_entry_id,
ppa.salary_amount,
ppa.currency_code
FROM
pay_element_entries_f ppa
JOIN
per_all_assignments_f pap ON ppa.assignment_id = pap.assignment_id
JOIN
per_all_people_f ppf ON pap.person_id = ppf.person_id
WHERE
ppa.element_name = 'Salary'
AND SYSDATE BETWEEN ppa.effective_start_date AND ppa.effective_end_date;
Here is the sample SQL Query for Oracle Fusion HCM. These queries will help to retrieve the basic information related to the employee assignment information.
This is the basic query, use this table accordingly and modify as per your requirements.
SQL Query :
SELECT
a.assignment_number,
p.person_number,
p.full_name,
a.job_id,
j.job_name,
a.position_id,
pos.position_name,
a.department_id,
d.department_name,
a.location_id,
loc.location_code AS location_name,
a.hire_date,
a.assignment_status_type
FROM
per_all_assignments_f a
JOIN
per_all_people_f p ON a.person_id = p.person_id
JOIN
per_jobs j ON a.job_id = j.job_id
JOIN
per_positions pos ON a.position_id = pos.position_id
JOIN
hr_organization_units d ON a.department_id = d.organization_id
JOIN
hr_locations loc ON a.location_id = loc.location_id
WHERE
SYSDATE BETWEEN a.effective_start_date AND a.effective_end_date;
Here is the sample SQL Query for Oracle Fusion HCM. These queries will help to retrieve the basic information related to the employee information.
Use this table accordingly and modify as per your requirements.
SQL Query :
SELECT
per.person_number,
per.full_name,
per.email_address,
per.phone_number,
per.date_of_birth,
per.effective_start_date AS start_date,
per.national_identifier AS ssn,
per.*
FROM
per_all_people_f per
WHERE
SYSDATE BETWEEN per.effective_start_date AND per.effective_end_date;
Here are some sample Oracle Fusion SQL queries for various aspects of project management:
SELECT project_id, project_name,
project_number,
project_status,
start_date,
end_date
FROM pjf_projects_all
WHERE project_status = 'APPROVED';
SELECT task_id, task_name,
task_number,
task_status,
start_date,
end_date
FROM pjf_tasks
WHERE project_id = :project_id; -- Replace with the specific project ID
SELECT expenditure_item_id, expenditure_type,
expenditure_date,
amount
FROM pjc_expenditure_items
WHERE project_id = :project_id; -- Replace with the specific project ID
SELECT budget_version_id, budget_line_id,
budget_amount,
budget_date
FROM pjf_budget_lines
WHERE project_id = :project_id; -- Replace with the specific project ID
SELECT assignment_id, resource_id,
task_id,
start_date,
end_date
FROM pjr_assignments
WHERE project_id = :project_id; -- Replace with the specific project ID
SELECT contract_id, contract_number,
contract_name,
start_date,
end_date,
contract_amount
FROM pjb_contracts_all
WHERE project_id = :project_id; -- Replace with the specific project ID
SELECT invoice_id, invoice_number,
invoice_date,
amount
FROM pjb_invoices_all
WHERE project_id = :project_id; -- Replace with the specific project ID
SELECT cost_distribution_line_id, transaction_id,
amount,
distribution_date
FROM pjc_cost_distribution_lines
WHERE project_id = :project_id; -- Replace with the specific project ID
These sample queries can be tailored to specific needs by modifying the WHERE
clause conditions or by adding more columns to the SELECT
statement.
Note, please refer to the Oracle documentations for any changes to the latest release and the updates.
In Oracle Fusion Project Management, several key tables store data related to various aspects of project management. These tables are integral for managing project finances, resources, and operations. Here are some of the key tables:
Projects and Tasks
PJF_PROJECTS_ALL
: Stores information about projects.PJF_TASKS
: Stores details of tasks associated with projects.Expenditures
PJC_EXPENDITURE_ITEMS
: Holds expenditure item data.PJC_EXPENDITURE_TYPES
: Stores types of expenditures.Budgets and Forecasts
PJF_BUDGET_VERSIONS
: Contains budget versions for projects.PJF_BUDGET_LINES
: Stores individual budget lines.Project Costing
PJC_COST_DISTRIBUTION_LINES
: Contains cost distribution lines.PJC_TRANSACTIONS
: Stores project transaction details.Billing
PJB_INVOICES_ALL
: Contains billing invoice data.PJB_INVOICE_LINES_ALL
: Stores invoice lines.Resources and Assignments
PJR_RESOURCES
: Contains information about resources assigned to projects.PJR_ASSIGNMENTS
: Stores details of resource assignments to tasks.Contracts and Funding
PJB_CONTRACTS_ALL
: Holds contract information.PJB_FUNDING_DISTRIBUTIONS
: Contains funding distribution details.Project Integration and Reporting
PJF_PROJECT_REPORTING
: Stores data for project reporting purposes.PJF_INTEGRATION_EVENTS
: Contains integration event data for project management.These tables are crucial for the functionality of Oracle Fusion Project Management, allowing users to manage projects comprehensively from budgeting and costing to billing and resource management.
Please refer to the Oracle documentations for any changes in the latest releases.
In Oracle Fusion Procurement, several key tables store data related to purchasing, suppliers, purchase orders, and related procurement activities. Here’s an overview of some important tables in Oracle Fusion Procurement, along with sample SQL queries which will be able to leveraged and can retrieve data from these tables.
PO_HEADERS_ALL
PO_HEADER_ID
, PO_NUMBER
, VENDOR_ID
, CREATION_DATE
, STATUS
, etc.PO_LINES_ALL
PO_LINE_ID
, PO_HEADER_ID
, LINE_ID
, ITEM_ID
, QUANTITY
, UNIT_PRICE
, etc.PO_DISTRIBUTIONS_ALL
PO_DISTRIBUTION_ID
, PO_LINE_ID
, ACCOUNTING_DATE
, DISTRIBUTION_AMOUNT
, etc.PO_SUPPLIERS
SUPPLIER_ID
, SUPPLIER_NAME
, SUPPLIER_TYPE
, STATUS
, ADDRESS
, etc.PO_DOCUMENTS
DOCUMENT_ID
, PO_HEADER_ID
, DOCUMENT_TYPE
, DOCUMENT_NAME
, etc.PO_AGREEMENTS
AGREEMENT_ID
, AGREEMENT_NUMBER
, SUPPLIER_ID
, START_DATE
, END_DATE
, etc.PO_AGREEMENT_LINES
AGREEMENT_LINE_ID
, AGREEMENT_ID
, ITEM_ID
, QUANTITY
, PRICE
, etc.PO_APPROVALS
APPROVAL_ID
, PO_HEADER_ID
, APPROVAL_STATUS
, APPROVER_ID
, APPROVAL_DATE
, etc.PO_RECEIPTS
RECEIPT_ID
, PO_HEADER_ID
, RECEIPT_DATE
, QUANTITY_RECEIVED
, ITEM_ID
, etc.PO_PAYMENTS
PAYMENT_ID
, PO_HEADER_ID
, PAYMENT_AMOUNT
, PAYMENT_DATE
, PAYMENT_STATUS
, etc.SELECT p.PO_HEADER_ID,
p.PO_NUMBER,
p.VENDOR_ID,
v.SUPPLIER_NAME,
p.CREATION_DATE,
p.STATUS
FROM
PO_HEADERS_ALL p
JOIN PO_SUPPLIERS v ON p.VENDOR_ID = v.SUPPLIER_ID
WHERE
p.CREATION_DATE BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD')
ORDER BY
p.CREATION_DATE DESC;
SELECT l.PO_LINE_ID,
l.PO_HEADER_ID,
l.LINE_ID,
l.ITEM_ID,
i.ITEM_NAME,
l.QUANTITY,
l.UNIT_PRICE
FROM
PO_LINES_ALL l
JOIN INV_MTL_SYSTEM_ITEMS_B i ON l.ITEM_ID = i.ITEM_ID
WHERE
l.PO_HEADER_ID = :PO_HEADER_ID
ORDER BY
l.LINE_ID;
SELECT d.PO_DISTRIBUTION_ID,
d.PO_LINE_ID,
d.ACCOUNTING_DATE,
d.DISTRIBUTION_AMOUNT,
l.ITEM_ID
FROM
PO_DISTRIBUTIONS_ALL d
JOIN PO_LINES_ALL l ON d.PO_LINE_ID = l.PO_LINE_ID
WHERE
d.PO_HEADER_ID = :PO_HEADER_ID
ORDER BY
d.ACCOUNTING_DATE;
SELECT s.SUPPLIER_ID,
s.SUPPLIER_NAME,
s.SUPPLIER_TYPE,
s.STATUS,
s.ADDRESS
FROM
PO_SUPPLIERS s
WHERE
s.STATUS = 'Active'
ORDER BY
s.SUPPLIER_NAME;
SELECT r.RECEIPT_ID,
r.PO_HEADER_ID,
p.PO_NUMBER,
r.RECEIPT_DATE,
r.QUANTITY_RECEIVED,
l.ITEM_ID
FROM
PO_RECEIPTS r
JOIN PO_HEADERS_ALL p ON r.PO_HEADER_ID = p.PO_HEADER_ID
JOIN PO_LINES_ALL l ON r.PO_HEADER_ID = l.PO_HEADER_ID
WHERE
r.RECEIPT_DATE BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD')
ORDER BY
r.RECEIPT_DATE DESC;
SELECT a.AGREEMENT_ID,
a.AGREEMENT_NUMBER,
a.START_DATE,
a.END_DATE,
s.SUPPLIER_NAME
FROM
PO_AGREEMENTS a
JOIN PO_SUPPLIERS s ON a.SUPPLIER_ID = s.SUPPLIER_ID
WHERE
a.START_DATE BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD')
ORDER BY
a.START_DATE;
SELECT
al.AGREEMENT_LINE_ID,
al.ITEM_ID,
i.ITEM_NAME,
al.QUANTITY,
al.PRICE
FROM
PO_AGREEMENT_LINES al
JOIN INV_MTL_SYSTEM_ITEMS_B i ON al.ITEM_ID = i.ITEM_ID
WHERE
al.AGREEMENT_ID = :AGREEMENT_ID
ORDER BY
al.ITEM_ID;
These tables and queries should help you effectively manage and analyze procurement data within Oracle Fusion Applications and can be leveraged for building custom requirements.
In Oracle Fusion Human Capital Management (HCM), various tables store information related to employees, payroll, benefits, and other HR functions. Here are some key tables in Oracle Fusion HCM and sample SQL queries to illustrate how to retrieve data from these tables:
PER_PEOPLE_F
PERSON_ID
, FIRST_NAME
, LAST_NAME
, DATE_OF_BIRTH
, GENDER
, etc.PER_JOBS_F
JOB_ID
, JOB_NAME
, DEPARTMENT_ID
, LOCATION_ID
, START_DATE
, END_DATE
, etc.PER_ASSIGNMENTS_F
ASSIGNMENT_ID
, PERSON_ID
, JOB_ID
, DEPARTMENT_ID
, LOCATION_ID
, ASSIGNMENT_STATUS
, etc.PER_LOCATIONS
LOCATION_ID
, LOCATION_NAME
, ADDRESS
, CITY
, STATE
, COUNTRY
, etc.PER_DEPARTMENTS
DEPARTMENT_ID
, DEPARTMENT_NAME
, MANAGER_ID
, LOCATION_ID
, etc.PAY_ELEMENT_ENTRIES_F
ELEMENT_ENTRY_ID
, PERSON_ID
, ELEMENT_ID
, PAYMENT_AMOUNT
, DEDUCTION_AMOUNT
, START_DATE
, END_DATE
, etc.PAY_PAYROLLS_F
PAYROLL_ID
, PAYROLL_NAME
, PAYROLL_STATUS
, PAYROLL_RUN_DATE
, etc.PER_GRADES
GRADE_ID
, GRADE_NAME
, MIN_SALARY
, MAX_SALARY
, etc.PER_BENEFIT_PROGRAMS
BENEFIT_PROGRAM_ID
, PROGRAM_NAME
, PROGRAM_TYPE
, START_DATE
, END_DATE
, etc.PER_LEAVE_ENTITLEMENTS
ENTITLEMENT_ID
, PERSON_ID
, LEAVE_TYPE
, ENTITLEMENT_AMOUNT
, BALANCE
, etc.SELECT p.PERSON_ID,
p.FIRST_NAME,
p.LAST_NAME,
p.DATE_OF_BIRTH,
j.JOB_NAME,
d.DEPARTMENT_NAME,
l.LOCATION_NAME
FROM
PER_PEOPLE_F p
JOIN PER_ASSIGNMENTS_F a ON p.PERSON_ID = a.PERSON_ID
JOIN PER_JOBS_F j ON a.JOB_ID = j.JOB_ID
JOIN PER_DEPARTMENTS d ON a.DEPARTMENT_ID = d.DEPARTMENT_ID
JOIN PER_LOCATIONS l ON a.LOCATION_ID = l.LOCATION_ID
WHERE
p.ACTIVE = 'Y'
ORDER BY
p.LAST_NAME;
SELECT p.PERSON_ID,
p.FIRST_NAME,
p.LAST_NAME,
e.ELEMENT_ID,
e.PAYMENT_AMOUNT,
e.DEDUCTION_AMOUNT,
pa.PAYROLL_NAME,
pa.PAYROLL_RUN_DATE
FROM
PAY_ELEMENT_ENTRIES_F e
JOIN PER_PEOPLE_F p ON e.PERSON_ID = p.PERSON_ID
JOIN PAY_PAYROLLS_F pa ON e.PAYROLL_ID = pa.PAYROLL_ID
WHERE
pa.PAYROLL_RUN_DATE BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD')
ORDER BY
p.LAST_NAME;
SELECT p.PERSON_ID,
p.FIRST_NAME,
p.LAST_NAME,
l.LEAVE_TYPE,
l.ENTITLEMENT_AMOUNT,
l.BALANCE
FROM
PER_LEAVE_ENTITLEMENTS l
JOIN PER_PEOPLE_F p ON l.PERSON_ID = p.PERSON_ID
WHERE
1 = 1
ORDER BY
p.LAST_NAME;
SELECT j.JOB_ID,
j.JOB_NAME,
g.GRADE_NAME,
g.MIN_SALARY,
g.MAX_SALARY
FROM
PER_JOBS_F j
JOIN PER_GRADES g ON j.GRADE_ID = g.GRADE_ID
ORDER BY
j.JOB_NAME;
SELECT p.PERSON_ID,
p.FIRST_NAME,
p.LAST_NAME,
b.PROGRAM_NAME,
b.PROGRAM_TYPE
FROM
PER_PEOPLE_F p
JOIN PER_BENEFIT_PROGRAMS b ON p.PERSON_ID = b.PERSON_ID
ORDER BY
p.LAST_NAME, b.PROGRAM_NAME;
These tables and queries should help you manage and analyze various aspects of HCM data within Oracle Fusion Applications and develop the objects accordingly.
In Oracle Fusion Applications, the Manufacturing module involves several key tables that store information related to production, work orders, inventory, and other manufacturing processes. Below are some of the primary tables involved in Manufacturing, along with sample SQL queries to illustrate how you can retrieve information from these tables.
WIP_OPERATIONS
OPERATION_ID
, WORK_ORDER_ID
, OPERATION_SEQUENCE_ID
, OPERATION_NAME
, OPERATION_STATUS
, etc.WIP_WORK_ORDERS
WORK_ORDER_ID
, WORK_ORDER_NUMBER
, PRODUCT_ID
, START_DATE
, END_DATE
, STATUS
, etc.WIP_JOB_SCHEDULES
JOB_SCHEDULE_ID
, WORK_ORDER_ID
, SCHEDULE_DATE
, SCHEDULED_START_TIME
, SCHEDULED_END_TIME
, etc.INV_MTL_SYSTEM_ITEMS_B
INVENTORY_ITEM_ID
, ITEM_ID
, ITEM_CODE
, ITEM_DESCRIPTION
, CATEGORY_ID
, etc.INV_MTL_ON_HAND_QUANTITIES
INVENTORY_ITEM_ID
, LOCATION_ID
, ON_HAND_QUANTITY
, LOT_NUMBER
, etc.WIP_DISCREPANCIES
DISCREPANCY_ID
, WORK_ORDER_ID
, DISCREPANCY_TYPE
, QUANTITY
, STATUS
, etc.WIP_BOM
BOM_ID
, ITEM_ID
, COMPONENT_ID
, QUANTITY_REQUIRED
, BOM_LEVEL
, etc.WIP_ASSEMBLY_HISTORY
ASSEMBLY_HISTORY_ID
, WORK_ORDER_ID
, PRODUCT_ID
, QUANTITY_PRODUCED
, DATE_PRODUCED
, etc.WIP_WO_RESOURCES
RESOURCE_ID
, WORK_ORDER_ID
, RESOURCE_TYPE
, RESOURCE_QUANTITY
, RESOURCE_STATUS
, etc.WIP_PROCESS_MATERIALS
PROCESS_ID
, MATERIAL_ID
, QUANTITY_USED
, UNIT_OF_MEASURE
, etc.Here are some example queries that can be used to retrieve data from these tables:
SELECT w.WORK_ORDER_ID,
w.WORK_ORDER_NUMBER,
w.PRODUCT_ID,
w.START_DATE,
w.END_DATE,
w.STATUS,
i.ITEM_CODE AS PRODUCT_CODE
FROM
WIP_WORK_ORDERS w
JOIN INV_MTL_SYSTEM_ITEMS_B i ON w.PRODUCT_ID = i.ITEM_ID
WHERE
w.START_DATE BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD')
ORDER BY
w.START_DATE DESC;
SELECT o.OPERATION_ID,
o.WORK_ORDER_ID,
o.OPERATION_SEQUENCE_ID,
o.OPERATION_NAME,
o.OPERATION_STATUS,
w.WORK_ORDER_NUMBER
FROM
WIP_OPERATIONS o
JOIN WIP_WORK_ORDERS w ON o.WORK_ORDER_ID = w.WORK_ORDER_ID
WHERE
w.STATUS = 'In Progress'
ORDER BY
o.OPERATION_SEQUENCE_ID;
SELECT i.ITEM_CODE,
i.ITEM_DESCRIPTION,
q.LOCATION_ID,
q.ON_HAND_QUANTITY
FROM
INV_MTL_SYSTEM_ITEMS_B i
JOIN INV_MTL_ON_HAND_QUANTITIES q ON i.INVENTORY_ITEM_ID = q.INVENTORY_ITEM_ID
WHERE
i.ITEM_CODE = 'ITEMX'
ORDER BY
q.LOCATION_ID;
SELECT d.DISCREPANCY_ID,
d.WORK_ORDER_ID,
d.DISCREPANCY_TYPE,
d.QUANTITY,
d.STATUS,
w.WORK_ORDER_NUMBER
FROM
WIP_DISCREPANCIES d
JOIN WIP_WORK_ORDERS w ON d.WORK_ORDER_ID = w.WORK_ORDER_ID
WHERE
d.STATUS = 'Open'
ORDER BY
d.DISCREPANCY_ID;
SELECT b.BOM_ID,
b.ITEM_ID AS PRODUCT_ID,
b.COMPONENT_ID,
b.QUANTITY_REQUIRED,
c.ITEM_CODE AS COMPONENT_CODE
FROM
WIP_BOM b
JOIN INV_MTL_SYSTEM_ITEMS_B c ON b.COMPONENT_ID = c.ITEM_ID
WHERE
b.ITEM_ID = 'PRODUCTX'
ORDER BY
b.BOM_LEVEL;
By utilizing these tables and queries, you can effectively manage and analyze manufacturing data within Oracle Fusion Applications.
In Oracle Fusion Applications, Accounts Receivables (AR) involves several key tables that store various aspects of financial transactions, customer details, invoices, payments, and related information. Here’s a list of some important tables related to Accounts Receivables in Oracle Fusion:
AR_INVOICE_HEADERS_ALL
INVOICE_ID
, INVOICE_NUMBER
, CUSTOMER_ID
, STATUS
, INVOICE_DATE
, etc.AR_INVOICE_LINES_ALL
INVOICE_LINE_ID
, INVOICE_ID
, LINE_ID
, LINE_AMOUNT
, PRODUCT_ID
, etc.AR_CASH_RECEIPTS_ALL
CASH_RECEIPT_ID
, RECEIPT_NUMBER
, CUSTOMER_ID
, RECEIPT_DATE
, AMOUNT_RECEIVED
, etc.AR_PAYMENT_SCHEDULES_ALL
PAYMENT_SCHEDULE_ID
, INVOICE_ID
, DUE_DATE
, AMOUNT_DUE
, etc.AR_RECEIPT_APPLICATIONS_ALL
RECEIPT_APPLICATION_ID
, RECEIPT_ID
, INVOICE_ID
, APPLIED_AMOUNT
, etc.AR_CUSTOMERS
CUSTOMER_ID
, CUSTOMER_NAME
, ACCOUNT_NUMBER
, STATUS
, etc.AR_CUSTOMER_ACCOUNTS
CUSTOMER_ACCOUNT_ID
, CUSTOMER_ID
, ACCOUNT_NUMBER
, STATUS
, etc.AR_DISTRIBUTIONS_ALL
DISTRIBUTION_ID
, INVOICE_ID
, RECEIPT_ID
, ACCOUNT_ID
, AMOUNT
, etc.AR_ADJUSTMENTS_ALL
ADJUSTMENT_ID
, INVOICE_ID
, RECEIPT_ID
, ADJUSTMENT_AMOUNT
, ADJUSTMENT_TYPE
, etc.AR_COLLECTIONS_ALL
COLLECTION_ID
, CUSTOMER_ID
, COLLECTION_DATE
, AMOUNT_COLLECTED
, etc.AR_TAX_LINES_ALL
TAX_LINE_ID
, INVOICE_ID
, TAX_AMOUNT
, TAX_CODE
, etc.AR_INVOICE_ACCOUNTS
INVOICE_ACCOUNT_ID
, INVOICE_ID
, ACCOUNTING_DATE
, ACCOUNTING_AMOUNT
, etc.Here’s a sample SQL query that joins some of these tables to retrieve basic invoice and payment information:
SELECT i.INVOICE_ID,
i.INVOICE_NUMBER,
i.INVOICE_DATE,
i.CUSTOMER_ID,
c.CUSTOMER_NAME,
l.LINE_ID,
l.LINE_AMOUNT,
r.RECEIPT_ID,
r.AMOUNT_RECEIVED
FROM
AR_INVOICE_HEADERS_ALL i
JOIN AR_INVOICE_LINES_ALL l ON i.INVOICE_ID = l.INVOICE_ID
LEFT JOIN AR_CASH_RECEIPTS_ALL r ON i.INVOICE_ID = r.INVOICE_ID
JOIN AR_CUSTOMERS c ON i.CUSTOMER_ID = c.CUSTOMER_ID
WHERE
i.INVOICE_DATE BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD')
ORDER BY
i.INVOICE_DATE DESC;
Using these tables, you can manage and analyze various aspects of Accounts Receivables within Oracle Fusion, helping to streamline financial processes and improve reporting accuracy.