could you please write out a function in functions.php Wordpress for the hook of action on ACF field save to calculate the letter grade for this CPT UI 'company' post. The metrics required for the calculation should be ACF fields on the company post. That mean's you should be able to get them in the function.

Please make it robust and follow best practices. Include comments and error handling.

The code should get the ACF metrics required for the calculations and calculate the new grading formula below:

Based on the metrics available, I suggest expanding the current grading formula to include additional metrics that might be valuable in determining whether a company is a good investment. Here is a revised formula, followed by suggested best and worst-case values:

Financial Health Score (FHS) - no changes
Profitability Score (PS) - no changes
Growth Score (GS) - no changes
Valuation Score (VS) - no changes
Efficiency Score (ES) - no changes
Management Quality Score (MQS) - no changes
Earnings Quality Score (EQS):
Earnings Per Share (EPS): Higher is better (higher earnings per share)
Earnings Per Share Diluted: Higher is better (higher diluted earnings per share)
Stability Score (SS):
Beta: Lower is better (lower stock price volatility)
Suggested extreme best and worst-case values for Earnings Quality Score and Stability Score:

Earnings Quality Score (EQS):

Earnings Per Share: Best case (10), Worst case (-5)
Earnings Per Share Diluted: Best case (10), Worst case (-5)
Stability Score (SS):

Beta: Best case (0.5), Worst case (2)
The min-max values provided for other scores seem to be reasonable as outer bounds for the metrics.

In order to calculate a final grading letter (A-F) based on these scores, first normalize each metric within its respective best and worst-case values. Then, assign weights to each score category depending on the investor's preferences or industry standards. Finally, calculate the overall score, and assign a grading letter based on the overall score's position within the range of possible scores.

Below is a list of the dataCode column which is the accessor of the ACF fields for each metric.
dataCode name
accoci Accumulated Other Comprehensive Income
acctPay Accounts Payable
acctRec Accounts Receivable
assetsCurrent Current Assets
assetsNonCurrent Other Assets
assetTurnover Asset Turnover
bookVal Book Value
businessAcqDisposals Business Acquisitions & Disposals
bvps Book Value Per Share
capex Capital Expenditure
cashAndEq Cash and Equivalents
consolidatedIncome Consolidated Income
costRev Cost of Revenue
currentRatio Current Ratio
debt Total Debt
debtCurrent Current Debt
debtEquity Debt to Equity Ratio
debtNonCurrent Non-Current Debt
deferredRev Deferred Revenue
depamor Depreciation, Amortization & Accretion
deposits Deposits
ebit Earning Before Interest & Taxes EBIT
ebitda EBITDA
ebt Earnings before tax
enterpriseVal Enterprise Value
eps Earnings Per Share
epsDil Earnings Per Share Diluted
epsQoQ Earnings Per Share QoQ Growth
equity Shareholders Equity
freeCashFlow Free Cash Flow
fxRate FX Rate
grossMargin Gross Margin
grossProfit Gross Profit
intangibles Intangible Assets
intexp Interest Expense
inventory Inventory
investments Investments
investmentsAcqDisposals Investment Acquisitions & Disposals
investmentsCurrent Current Investments
investmentsNonCurrent Non-Current Investments
issrepayDebt Issuance or Repayment of Debt Securities
issrepayEquity Issuance or Repayment of Equity
liabilitiesCurrent Current Liabilities
liabilitiesNonCurrent Other Liabilities
longTermDebtEquity Long-term Debt to Equity
marketCap Market Capitalization
ncf Net Cash Flow to Change in Cash & Cash Equivalents
ncff Net Cash Flow from Financing
ncfi Net Cash Flow from Investing
ncfo Net Cash Flow from Operations
ncfx Effect of Exchange Rate Changes on Cash
netinc Net Income
netIncComStock Net Income Common Stock
netIncDiscOps Net Income from Discontinued Operations
netMargin Net Margin
nonControllingInterests Net Income to Non-Controlling Interests
opex Operating Expenses
opinc Operating Income
opMargin Operating Margin
payDiv Payment of Dividends & Other Cash Distributions
pbRatio Price to Book Ratio
peRatio Price to Earnings Ratio
piotroskiFScore Piotroski F-Score
ppeq Property, Plant & Equipment
prefDVDs Preferred Dividends Income Statement Impact
profitMargin Profit Margin
retainedEarnings Accumulated Retained Earnings or Deficit
revenue Revenue
revenueQoQ Revenue QoQ Growth
rnd Research & Development
roa Return on Assets ROA
roe Return on Equity ROE
rps Revenue Per Share
sbcomp Shared-based Compensation
sga Selling, General & Administrative
shareFactor Share Factor
sharesBasic Shares Outstanding
shareswa Weighted Average Shares
shareswaDil Weighted Average Shares Diluted
taxAssets Tax Assets
taxExp Tax Expense
taxLiabilities Tax Liabilities
totalAssets Total Assets
totalLiabilities Total Liabilities
trailingPEG1Y PEG Ratio

The acf field to update is called markethd\_grade. Please write the code to calculate the grade for this company.
이 CPT UI '회사' 글의 글자 등급을 계산하기 위해 ACF 필드 저장에 대한 액션 후크에 대한 함수를 functions.php 워드프레스에 작성해 주시겠습니까? 계산에 필요한 메트릭은 회사 게시물의 ACF 필드여야 합니다. 즉, 함수에서 해당 지표를 가져올 수 있어야 합니다.

견고하게 만들고 모범 사례를 따르세요. 주석과 오류 처리를 포함하세요.

코드는 계산에 필요한 ACF 지표를 가져와서 아래의 새 등급 공식을 계산해야 합니다:

사용 가능한 메트릭을 기반으로 현재 등급 공식을 확장하여 회사가 좋은 투자처인지 판단하는 데 유용할 수 있는 추가 메트릭을 포함할 것을 제안합니다. 다음은 수정된 공식과 제안된 최고 및 최악의 값입니다:

재무 건전성 점수(FHS) - 변경 사항 없음
수익성 점수(PS) - 변경 사항 없음
성장 점수(GS) - 변경 사항 없음
가치 평가 점수(VS) - 변경 사항 없음
효율성 점수(ES) - 변경 사항 없음
경영 품질 점수(MQS) - 변경 사항 없음
수익 품질 점수(EQS):
주당 순이익(EPS): 높을수록 좋음(주당 순이익이 높음)
희석된 주당 순이익: 높을수록 좋음(희석 주당 순이익이 높을수록 좋음)
안정성 점수(SS):
베타: 낮을수록 좋음(주가 변동성이 낮음)
수익 품질 점수 및 안정성 점수에 대한 극단적인 최고 및 최악의 값을 제안합니다:

수익 품질 점수(EQS):

주당 순이익: 최상의 경우(10), 최악의 경우(-5)
희석된 주당 순이익: 최상의 경우(10), 최악의 경우(-5)
안정성 점수(SS):

베타: 최상의 경우(0.5), 최악의 경우(2)
다른 점수에 대해 제공된 최소-최대 값은 메트릭의 외곽 경계로 합당한 것으로 보입니다.

이러한 점수를 기반으로 최종 성적 문자(A-F)를 계산하려면 먼저 각 지표를 각각의 최고 및 최악의 값 내에서 정규화합니다. 그런 다음 투자자의 선호도 또는 업계 표준에 따라 각 점수 범주에 가중치를 할당합니다. 마지막으로 전체 점수를 계산하고 가능한 점수 범위 내에서 전체 점수의 순위에 따라 등급을 부여합니다.

아래는 각 지표에 대한 ACF 필드의 접근자인 dataCode 열의 목록입니다.
데이터코드 이름
accoci 기타포괄손익누계액
acctPay 미지급금
acctRec 미수금
assets현재 유동 자산
assets비유동 기타 자산
assetTurnover 자산 회전율
bookVal장부 가치
businessAcq처분 사업 인수 및 처분
주당 장부가액
capex 자본 지출
cashAndEq현금 및 등가물
consolidatedIncome 연결 소득
costRev 수익 비용
currentRatio 현재 비율
부채 총부채
부채현재 유동부채
부채자본부채비율 자본부채비율
부채비유동부채 비유동부채
deferredRev 이연 수익
depamor 감가상각비, 상각 및 증감액
예금 예금
이자 및 세금 차감 전 영업이익 EBIT
ebitda 상각 전 영업이익
ebt 법인세 차감 전 이익
엔터프라이즈밸 기업 가치
eps 주당 순이익
epsDil 희석 주당 순이익
epsQoQ 주당순이익 전분기 대비 성장률
equity 주주 자본
freeCashFlow 잉여현금흐름
fxRate환율
grossMargin 총 마진
grossProfit 총이익
무형자산 무형자산
intexp 이자 비용
재고 재고
투자 투자
투자Acq처분 투자 취득 및 처분
투자유동투자
투자비유동 비유동 투자
발행상환채무증권 발행 또는 상환
발행주식발행 또는 주식 상환
부채유동 유동 부채
부채비유동 기타 부채
장기부채자기자본 장기부채 대비 자본
시가총액 시가총액
현금 및 현금성 자산의 변동에 따른 NCF 순현금흐름
NCFF 금융활동으로 인한 순현금흐름
ncfi 투자활동으로 인한 순현금흐름
NCFO 영업활동으로 인한 순현금흐름
환율 변동이 현금에 미치는 영향 ncfx
netinc 순이익
netIncComStock 당기순이익 보통주
netIncDiscOps 중단 영업으로 인한 순이익
netMargin 순이익률
비지배지분순이익 비지배지분 순이익
영업 비용
opinc 영업 이익
opMargin 영업 마진
payDiv배당금 및 기타 현금 분배금 지급
pb비율 장부 대비 주가 비율
pe비율 가격 대비 수익 비율
piotroskiFScore Piotroski F-Score
ppeq 부동산, 플랜트 및 장비
prefDVDs 우선 배당 손익 계산서 영향
profit마진이익 마진
이익잉여금 누적 이익잉여금 또는 결손금
수익 수익
매출액전분기대비 매출액전분기대비 성장률
rnd 연구 및 개발
roa 총자산순이익률 ROA
roe 자기자본수익률 ROE
rps 주당 수익
sbcomp 주식 기반 보상
sga 판매, 일반 및 관리
shareFactor 주식 팩터
주식기초주식발행주식
주식와가중평균주
주식와희석된 가중평균주식수
taxAssets 세금 자산
taxExp 법인세비용
tax부채세부채
총자산 총자산
total부채 총 부채
trailingPEG1Y PEG 비율

업데이트할 ACF 필드는 markethd\_grade입니다. ca에 코드를 작성하세요.