[st] - 입력단 작업 완료

This commit is contained in:
2026-06-25 18:02:31 +09:00
parent 46cf24c193
commit 162e18142c
28 changed files with 6395 additions and 582 deletions
@@ -3,9 +3,27 @@ import { ValueType } from "realgrid"
import RealGrid, { GridFitStyle } from "realgrid"
import { RealGridReact, RGDataColumn } from "realgrid-react"
import type { DataGridProps, RealGridColumnInfo, GridViewWithSetColumns, FooterItemWithCallback, CellStyleCallback } from "../type/DataGrid.type"
import type { DataGridProps, RealGridColumnInfo, GridViewWithSetColumns, FooterItemWithCallback, CellStyleCallback, CellStyleCallbackResult, CellStyleCallbackParams } from "../type/DataGrid.type"
import { getComputedValueCallback } from "@/components/util/grid/computedFieldCallbacks"
function mergeCellStyleCallbackResult(
baseStyleName: string | undefined,
extra: CellStyleCallbackResult | undefined,
): CellStyleCallbackResult {
if (!extra) {
return baseStyleName ? { styleName: baseStyleName } : {};
}
if (typeof extra === "string") {
const styleName = [extra, baseStyleName].filter(Boolean).join(" ");
return styleName ? { styleName } : {};
}
const styleName = [extra.styleName, baseStyleName].filter(Boolean).join(" ");
return {
...extra,
...(styleName ? { styleName } : {}),
};
}
// RealGrid 타입 확장
declare module "realgrid" {
interface GridView {
@@ -411,18 +429,33 @@ const CompactDataGrid = ({
columns.forEach((column) => {
const baseStyleName = column.styleName;
const gridCol = currentGridView.columnByName(column.name) as {
styleCallback?: (g: unknown, dataCell: { itemIndex?: number; index?: { itemIndex?: number }; dataField?: string; fieldName?: string }) => string;
styleCallback?: (
g: unknown,
dataCell: {
itemIndex?: number;
index?: { itemIndex?: number };
dataField?: string;
fieldName?: string;
},
) => CellStyleCallbackResult;
} | null;
if (gridCol) {
gridCol.styleCallback = (_g, dataCell) => {
gridCol.styleCallback = (grid, dataCell) => {
const itemIndex = dataCell?.index?.itemIndex ?? dataCell?.itemIndex ?? -1;
const fieldName = (dataCell?.dataField ?? dataCell?.fieldName ?? column.fieldName) ?? '';
const fieldName =
(dataCell?.dataField ?? dataCell?.fieldName ?? column.fieldName) ?? "";
const data = rowDataRef.current;
if (itemIndex < 0 || itemIndex >= data.length) return baseStyleName ?? '';
if (itemIndex < 0 || itemIndex >= data.length) {
return mergeCellStyleCallbackResult(baseStyleName, undefined);
}
const row = data[itemIndex] as Record<string, string | number>;
const extra = cellStyleCallbackRef.current?.({ rowIndex: itemIndex, fieldName, row });
if (!extra) return baseStyleName ?? '';
return baseStyleName ? `${extra} ${baseStyleName}` : extra;
const extra = cellStyleCallbackRef.current?.({
rowIndex: itemIndex,
fieldName,
row,
grid: grid as CellStyleCallbackParams["grid"],
});
return mergeCellStyleCallbackResult(baseStyleName, extra);
};
}
});
+43 -9
View File
@@ -11,6 +11,8 @@ import { Button } from "@common/components";
import type {
CellStyleCallback,
CellStyleCallbackParams,
CellStyleCallbackResult,
CellTooltipCallback,
ColumnLayoutItem,
DataGridProps,
@@ -28,6 +30,24 @@ import {
} from "@/components/util/gridExcelExport";
import { useTabStore } from "@/store/tab-store";
function mergeCellStyleCallbackResult(
baseStyleName: string | undefined,
extra: CellStyleCallbackResult | undefined,
): CellStyleCallbackResult {
if (!extra) {
return baseStyleName ? { styleName: baseStyleName } : {};
}
if (typeof extra === "string") {
const styleName = [extra, baseStyleName].filter(Boolean).join(" ");
return styleName ? { styleName } : {};
}
const styleName = [extra.styleName, baseStyleName].filter(Boolean).join(" ");
return {
...extra,
...(styleName ? { styleName } : {}),
};
}
// RealGrid 타입 확장
declare module "realgrid" {
interface GridView {
@@ -570,6 +590,14 @@ function buildFieldsFromColumns(
"denominatorQuotient" in col.computed &&
col.computed.numeratorQuotient.length === 2 &&
col.computed.denominatorQuotient.length === 2;
const hasQuotientTimesMultiplierPercent =
col.computed.type === "quotientTimesMultiplierPercent" &&
"numeratorField" in col.computed &&
"denominatorField" in col.computed &&
"multiplierField" in col.computed &&
Boolean(col.computed.numeratorField) &&
Boolean(col.computed.denominatorField) &&
Boolean(col.computed.multiplierField);
if (
hasFields ||
hasNumeratorDenominator ||
@@ -581,7 +609,8 @@ function buildFieldsFromColumns(
hasPumpGrossPpqty ||
hasBodPrcsRt ||
hasSumPerTenThousand ||
hasQuotientRatioPercent
hasQuotientRatioPercent ||
hasQuotientTimesMultiplierPercent
) {
const computedCallback = getComputedValueCallback(
col.computed,
@@ -1922,7 +1951,7 @@ const DataGrid = ({
dataField?: string;
fieldName?: string;
},
) => string;
) => CellStyleCallbackResult;
renderer?: { showTooltip?: boolean };
} | null;
if (gridCol) {
@@ -1961,7 +1990,7 @@ const DataGrid = ({
{ showTooltip: true },
);
}
gridCol.styleCallback = (_g, dataCell) => {
gridCol.styleCallback = (grid, dataCell) => {
const itemIndex =
dataCell?.index?.itemIndex ??
dataCell?.itemIndex ??
@@ -1974,8 +2003,12 @@ const DataGrid = ({
if (
itemIndex < 0 ||
itemIndex >= data.length
)
return baseStyleName ?? "";
) {
return mergeCellStyleCallbackResult(
baseStyleName,
undefined,
);
}
const row = data[itemIndex] as Record<
string,
string | number
@@ -1985,11 +2018,12 @@ const DataGrid = ({
rowIndex: itemIndex,
fieldName,
row,
grid: grid as CellStyleCallbackParams["grid"],
});
if (!extra) return baseStyleName ?? "";
return baseStyleName
? `${extra} ${baseStyleName}`
: extra;
return mergeCellStyleCallbackResult(
baseStyleName,
extra,
);
};
}
});
+27 -7
View File
@@ -10,9 +10,27 @@ import { useAlertStore } from "@/shared/lib";
import { Tabs, TabsContent,TabsList, TabsTrigger } from "@common/components";
import { Button } from "@common/components";
import type { CellStyleCallback,ColumnConfig, ColumnInfo, ColumnLayoutItem, FooterItemWithCallback, GridViewWithSetColumns, RealGridColumnInfo, TabDataGridProps } from "../type/DataGrid.type"
import type { CellStyleCallback, CellStyleCallbackParams, CellStyleCallbackResult, ColumnConfig, ColumnInfo, ColumnLayoutItem, FooterItemWithCallback, GridViewWithSetColumns, RealGridColumnInfo, TabDataGridProps } from "../type/DataGrid.type"
import GridTopActionButton from "./GridTopActionButton";
function mergeCellStyleCallbackResult(
baseStyleName: string | undefined,
extra: CellStyleCallbackResult | undefined,
): CellStyleCallbackResult {
if (!extra) {
return baseStyleName ? { styleName: baseStyleName } : {};
}
if (typeof extra === "string") {
const styleName = [extra, baseStyleName].filter(Boolean).join(" ");
return styleName ? { styleName } : {};
}
const styleName = [extra.styleName, baseStyleName].filter(Boolean).join(" ");
return {
...extra,
...(styleName ? { styleName } : {}),
};
}
import SplitDataGrid from "./SplitDataGrid";
import { getComputedValueCallback } from "@/components/util/grid/computedFieldCallbacks"
@@ -73,10 +91,12 @@ function safeGridViewRefresh(gv: { refresh?: () => void } | null | undefined) {
function safeColumnByName(
gv: { columnByName?: (name: string) => unknown } | null | undefined,
name: string,
): { styleCallback?: (g: unknown, dataCell: Record<string, unknown>) => string } | null {
): { styleCallback?: (g: unknown, dataCell: Record<string, unknown>) => CellStyleCallbackResult } | null {
if (!gv?.columnByName) return null;
try {
const col = gv.columnByName(name) as { styleCallback?: (g: unknown, dataCell: Record<string, unknown>) => string } | null;
const col = gv.columnByName(name) as {
styleCallback?: (g: unknown, dataCell: Record<string, unknown>) => CellStyleCallbackResult;
} | null;
return col ?? null;
} catch {
return null;
@@ -296,7 +316,7 @@ const TabDataGrid = ({
const gridCol = safeColumnByName(gv, column.name);
if (!gridCol) continue;
const baseStyleName = column.styleName;
gridCol.styleCallback = (_g, dataCell) => {
gridCol.styleCallback = (grid, dataCell) => {
const dc = dataCell as {
itemIndex?: number;
index?: { itemIndex?: number };
@@ -307,16 +327,16 @@ const TabDataGrid = ({
const fieldName = dc?.dataField ?? dc?.fieldName ?? column.fieldName;
const data = rowDataMapRef.current.get(tabKey) || [];
if (itemIndex < 0 || itemIndex >= data.length) {
return baseStyleName ?? "";
return mergeCellStyleCallbackResult(baseStyleName, undefined);
}
const row = data[itemIndex] as Record<string, string | number>;
const extra = cellStyleCallbackRef.current?.({
rowIndex: itemIndex,
fieldName,
row,
grid: grid as CellStyleCallbackParams["grid"],
});
if (!extra) return baseStyleName ?? "";
return baseStyleName ? `${extra} ${baseStyleName}` : extra;
return mergeCellStyleCallbackResult(baseStyleName, extra);
};
attachedCount += 1;
}
@@ -1140,8 +1140,8 @@ const PrivateSewageFacilityInp = () => {
onValuesChange={setSearchValues}
/>
{showActionToolbarCard && (
<div className="card !py-0">
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
<div className="card !py-0">
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
<VerificationResultButton
VerificationResultButtonFunc={openVerificationHistoryDialog}
/>
@@ -1150,7 +1150,7 @@ const PrivateSewageFacilityInp = () => {
<LastYearDataButton
getLastYearDataFunc={() => void lastYearDataFunc()}
/>
<SubmitButton submitFunc={submitFunc} />
<SubmitButton submitFunc={submitFunc} />
</>
)}
{activeTabStatus?.laeSbmsnSttsCd === "2" && (
@@ -967,7 +967,7 @@ const PumpingStationInp = () => {
onValuesChange={setSearchValues}
/>
{showActionToolbarCard && (
<div className="card !py-0">
<div className="card !py-0">
<div className="m-[0.6rem] flex items-center justify-end gap-[0.6rem]">
<VerificationResultButton
VerificationResultButtonFunc={openVerificationHistoryDialog}
@@ -977,18 +977,18 @@ const PumpingStationInp = () => {
<LastYearDataButton
getLastYearDataFunc={() => void getLastYearDataFunc()}
/>
<SubmitButton submitFunc={submitFunc} />
<SubmitButton submitFunc={submitFunc} />
</>
)}
{statusInfo?.laeSbmsnSttsCd === "2" && (
<CancelSubmitButton cnacelSubmitFunc={cnacelSubmitFunc} />
)}
{showSaveInToolbar && <SaveButton saveFunc={saveFunc} />}
</div>
</div>
</div>
</div>
)}
{showArticleToolbarCard && (
<div className="card !py-0">
<div className="card !py-0">
<div className="m-[0.6rem] flex items-center justify-end gap-[0.6rem]">
{showNotApplicable && (
<NotApplicableCheckButton
@@ -996,10 +996,10 @@ const PumpingStationInp = () => {
setIsCheck={setIsNotApplicable}
/>
)}
<AddArticleButton addArticleFunc={addArticleFunc} />
<DeleteArticleButton deleteArticleFunc={deleteArticleFunc} />
</div>
</div>
<AddArticleButton addArticleFunc={addArticleFunc} />
<DeleteArticleButton deleteArticleFunc={deleteArticleFunc} />
</div>
</div>
)}
{isLoading && (
<div className="absolute inset-0 z-50 flex items-center justify-center rounded-lg p-10 [data-theme='black']:bg-transparent">
@@ -1008,14 +1008,14 @@ const PumpingStationInp = () => {
</div>
</div>
)}
<DataGrid
<DataGrid
key={canEditGrid ? "enterable" : "readonly"}
getGridRef={gridRef as RefObject<RealGridReact | null>}
columnInfo={columnInfo}
rowStartNum={PumpingStationInpColumn.rowStartNum}
fixedColumns={PumpingStationInpColumn.fixedColumns}
rowData={rowData}
setRowData={setRowData}
rowData={rowData}
setRowData={setRowData}
getGridDataRef={gridGetRowsRef}
showHeaderCheckbox
statusInfo={statusInfo}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -37,7 +37,11 @@ import {
type SewerageServiceLevelResidentFriendlyFactSaveItem,
type SewerageServiceLevelVerificationResult,
} from "@/entities/statistics/model/input/statistics-input-sewerage-service-level-interface";
import type { SewerageStatusInfo, cancelSubmitRequest, ImrStatusResponse } from "@/entities/statistics/model/statistics-interface";
import type {
SewerageStatusInfo,
cancelSubmitRequest,
ImrStatusResponse,
} from "@/entities/statistics/model/statistics-interface";
import type { StatisticsInputSubmitInfoFormData } from "@/entities/statistics/model/statistics-input-submit-info-schema";
import { useAlertStore, useGlobalProgressStore, useStatisticsInputToolbarGroupGate } from "@/shared/lib";
import { ConfirmDialog } from "@/shared/ui/confirm-dialog";
@@ -62,6 +66,18 @@ const SEWERAGE_SERVICE_LEVEL_COLUMN_GUIDE_STATS_CD_BY_TAB_KEY: Record<string, st
[ResidentFriendlyFactInpColumn.tabKey]: SEWERAGE_SERVICE_LEVEL_RESIDENT_FRIENDLY_FACT_STATS_CD,
};
const EMPTY_PUBLIC_SEWAGE_FACILITIES_MSG =
"06. 공공하수처리시설 데이터가 없으면 전년도 데이터 조회 및 항목 추가가 불가능 합니다.";
function buildEmptyDataAlertOverrides(
tabKey: string,
): { alertIfResidentFriendlyEmpty?: boolean } | undefined {
if (tabKey === ResidentFriendlyFactInpColumn.tabKey) {
return { alertIfResidentFriendlyEmpty: true };
}
return undefined;
}
type GridRowWithVerification = Record<string, string | number> & {
verificationResult?: SewerageServiceLevelVerificationResult;
};
@@ -299,6 +315,8 @@ const SewerageServiceLevelInp = () => {
const periodEnterableRef = useRef(true);
const activeTabRef = useRef(activeTab);
const getGridDataRef = useRef<(() => Record<string, string | number>[]) | null>(null);
/** ST00130002 당해 조회 결과 유무(공공하수처리시설 연동) — 전년도 조회 가능 여부 */
const publicSewageFacilitiesAvailableRef = useRef(false);
activeTabRef.current = activeTab;
useEffect(() => {
@@ -384,9 +402,10 @@ const SewerageServiceLevelInp = () => {
searchContext: SearchFormValues,
mergeIntoExistingMap: boolean,
updateLastSearchedValues: boolean,
overrides?: { mode?: string },
overrides?: { mode?: string; alertIfResidentFriendlyEmpty?: boolean },
): Promise<boolean> => {
const requestParam = overrides?.mode ? { ...param, mode: overrides.mode } : param;
const fromPreYear = overrides?.mode === "PRE";
if (tabKey === ComplaintInpColumn.tabKey) {
const response =
@@ -426,6 +445,12 @@ const SewerageServiceLevelInp = () => {
(residentFriendlyFactList ?? []) as SewerageServiceLevelResidentFriendlyFactItem[],
commonInfo.ctpvNm,
);
if (!fromPreYear) {
publicSewageFacilitiesAvailableRef.current = gridRows.length > 0;
if (gridRows.length === 0 && overrides?.alertIfResidentFriendlyEmpty) {
alert(EMPTY_PUBLIC_SEWAGE_FACILITIES_MSG);
}
}
applyRowMap(mergeIntoExistingMap, (m) => {
m.set(ResidentFriendlyFactInpColumn.tabKey, gridRows);
@@ -460,6 +485,7 @@ const SewerageServiceLevelInp = () => {
searchParamRef.current = null;
searchDoneRef.current = false;
periodEnterableRef.current = true;
publicSewageFacilitiesAvailableRef.current = false;
};
const handleSearch = async (values: SearchFormValues) => {
@@ -507,6 +533,7 @@ const SewerageServiceLevelInp = () => {
values,
!yearChangedFromLastSearch,
true,
buildEmptyDataAlertOverrides(activeTabRef.current),
);
} catch {
alert("데이터 조회 중 오류가 발생했습니다.");
@@ -541,6 +568,7 @@ const SewerageServiceLevelInp = () => {
lastSearchedValues,
true,
false,
buildEmptyDataAlertOverrides(tabKey),
);
} catch {
alert("데이터 조회 중 오류가 발생했습니다.");
@@ -559,6 +587,13 @@ const SewerageServiceLevelInp = () => {
alert("먼저 데이터를 조회해주세요.");
return;
}
if (
activeTabRef.current === ResidentFriendlyFactInpColumn.tabKey &&
!publicSewageFacilitiesAvailableRef.current
) {
alert(EMPTY_PUBLIC_SEWAGE_FACILITIES_MSG);
return;
}
try {
setIsLoading(true);
@@ -481,17 +481,6 @@ function mapTreatWaterReuseStatusListToGridRows<
});
}
function mapWaterReuseListToGridRows<
T extends { verificationResult?: WaterReuseVerificationResult },
>(list: T[], ctpvNm: string): GridRowWithVerification[] {
return list.map((item) => {
const { verificationResult, ...rest } = item;
const row = toGridRows([{ ctpvNm, ...rest }])[0] as GridRowWithVerification;
if (verificationResult) row.verificationResult = verificationResult;
return row;
});
}
const sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
async function waitForImrJobCompleted(
@@ -1871,7 +1860,6 @@ const WaterReuseInp = () => {
}, [tabStatusInfoMap, inputPeriodEnterable, isAdminInfo, columnGuidesByTab, sggOptions]);
const activeTabStatus = tabStatusInfoMap.get(activeTab) ?? null;
const activeTabRowData = rowDataMap.get(activeTab) ?? [];
const activeTabToolbar =
toolbarSnapshotByTab.get(activeTab) ??
computeTabToolbarSnapshot(
+23 -1
View File
@@ -184,6 +184,13 @@ export type ComputedFieldConfig =
numeratorQuotient: [string, string];
denominatorQuotient: [string, string];
type: "quotientRatioPercent";
}
| {
/** (numeratorField / denominatorField) × multiplierField × 100 */
numeratorField: string;
denominatorField: string;
multiplierField: string;
type: "quotientTimesMultiplierPercent";
};
export type ColumnConfig = {
@@ -306,15 +313,30 @@ export type ColumnInfoList = {
};
// 개별 셀 스타일을 동적으로 결정하기 위한 콜백 (예: 검증 오류 셀 강조)
export type CellStyleCallbackGrid = {
getValue?: (itemIndex: number, fieldName: string) => unknown;
};
export type CellStyleCallbackParams = {
rowIndex: number;
fieldName: string;
row: Record<string, string | number>;
/** styleCallback 시점의 그리드 값 조회(행 단위 동적 스타일용) */
grid?: CellStyleCallbackGrid;
};
/** RealGrid styleCallback — 문자열(styleName) 또는 editable 등 동적 스타일 객체 */
export type CellStyleCallbackResult =
| string
| {
styleName?: string;
editable?: boolean;
readOnly?: boolean;
};
export type CellStyleCallback = (
params: CellStyleCallbackParams,
) => string | undefined;
) => CellStyleCallbackResult | undefined;
/** 셀 hover 시 툴팁 문구 (반환 시 해당 문구 표시, 검증 오류 메시지 등) */
export type CellTooltipCallbackParams = {
@@ -5,74 +5,75 @@ import { ValueType } from "realgrid";
export const ExcretaRelatedIndustryInpColumn = {
columns: [
// 행정구역
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
// 행정코드 (hidden)
{ name: 'ADST_DSTR_CD', fieldName: '행정구역코드', header: { text: '행정구역코드' }, visible: false },
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
{ name: 'ADST_DONG', fieldName: '행정동', header: { text: '행정동' }, visible: false },
{ name: 'RGN_NM', fieldName: '지역명', header: { text: '지역명' }, visible: false },
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
// 업체수(개소)
{ name: 'ECSCS_SM', fieldName: '업체수(개소)', header: { text: '업체수(개소)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'bzentyCnt', fieldName: 'bzentyCnt', header: { text: '업체수(개소)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 종사인원(명)
{ name: 'ECSCS_BSMN', fieldName: '종사인원(명)', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'empNope', fieldName: 'empNope', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 시설(차량) 확보현황(대수)
{ name: 'VHCLE_SM', fieldName: '계', header: { text: '계' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'THREE_BELOW', fieldName: '3톤이하', header: { text: '3톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'FOUR_BELOW', fieldName: '4.5톤이하', header: { text: '4.5톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'EIGHT_BELOW', fieldName: '8톤이하', header: { text: '8톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{
name: 'fcltSecrPrstCnt',
fieldName: 'fcltSecrPrstCnt',
header: { text: '계' },
editable: false, footer:
footerInt,
valueType: ValueType.NUMBER,
dataFormat: '#,##0',
styleName: 'rg-cell-total',
computed: {
fields: ['n3TonUdrCnt', 'n4TonUdrCnt', 'n8TonUdrCnt', 'etcCnt'],
type: 'sum' as const,
},
},
{ name: 'n3TonUdrCnt', fieldName: 'n3TonUdrCnt', header: { text: '3톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'n4TonUdrCnt', fieldName: 'n4TonUdrCnt', header: { text: '4.5톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'n8TonUdrCnt', fieldName: 'n8TonUdrCnt', header: { text: '8톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'etcCnt', fieldName: 'etcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 수집·운반 실적(m³/년)
{ name: 'COLCT_TRSP_ACMSLT', fieldName: '수집·운반 실적(m³/년)', header: { text: '수집·운반 실적(m³/년)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'clctCnvncPrfmncQnt', fieldName: 'clctCnvncPrfmncQnt', header: { text: '수집·운반 실적(m³/년)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 비고
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
// Hidden: 의견 필드
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
{ name: 'CHK_ECSCS_SM', fieldName: 'CHK_ECSCS_SM', header: { text: 'CHK_ECSCS_SM' }, visible: false },
{ name: 'CHK_ECSCS_BSMN', fieldName: 'CHK_ECSCS_BSMN', header: { text: 'CHK_ECSCS_BSMN' }, visible: false },
{ name: 'CHK_VHCLE_SM', fieldName: 'CHK_VHCLE_SM', header: { text: 'CHK_VHCLE_SM' }, visible: false },
{ name: 'CHK_THREE_BELOW', fieldName: 'CHK_THREE_BELOW', header: { text: 'CHK_THREE_BELOW' }, visible: false },
{ name: 'CHK_FOUR_BELOW', fieldName: 'CHK_FOUR_BELOW', header: { text: 'CHK_FOUR_BELOW' }, visible: false },
{ name: 'CHK_EIGHT_BELOW', fieldName: 'CHK_EIGHT_BELOW', header: { text: 'CHK_EIGHT_BELOW' }, visible: false },
{ name: 'CHK_ETC', fieldName: 'CHK_ETC', header: { text: 'CHK_ETC' }, visible: false },
{ name: 'CHK_COLCT_TRSP_ACMSLT', fieldName: 'CHK_COLCT_TRSP_ACMSLT', header: { text: 'CHK_COLCT_TRSP_ACMSLT' }, visible: false },
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
],
columnLayout: [
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['SIDO', 'GUGUN']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'ECSCS_SM',
'ECSCS_BSMN',
'bzentyCnt',
'empNope',
{
name: 'group_vehicle_status',
header: { text: '시설(차량) 확보현황(대수)' },
items: [
'VHCLE_SM',
'THREE_BELOW',
'FOUR_BELOW',
'EIGHT_BELOW',
'ETC'
'fcltSecrPrstCnt',
'n3TonUdrCnt',
'n4TonUdrCnt',
'n8TonUdrCnt',
'etcCnt'
]
},
'COLCT_TRSP_ACMSLT',
'RMK'
'clctCnvncPrfmncQnt',
'rmrk',
'admdstCd',
'admdstNm',
],
rowStartNum: 2,
fixedColumns: 1,
tabKey: 'excretaRelatedIndustryInp',
fixedColumns: 0,
tabKey: 'ST00120003',
tabLabel: '분뇨수집·운반업'
};
@@ -5,82 +5,59 @@ import { ValueType } from "realgrid";
export const PrivateSewageTreatRelatedIndustryInpColumn = {
columns: [
// 행정구역
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
// 행정코드 (hidden)
{ name: 'ADST_DONG', fieldName: '행정동', header: { text: '행정동' }, visible: false },
{ name: 'RGN_NM', fieldName: '지역명', header: { text: '지역명' }, visible: false },
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
// 개인하수처리시설 설계·시공업
{ name: 'CNSTRCT_ENTRPS', fieldName: '업소수', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'CNSTRCT_BSMN', fieldName: '종사인원(명)', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'designMdsrCnt', fieldName: 'designMdsrCnt', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'designMdsrNope', fieldName: 'designMdsrNope', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 개인하수처리시설 제조업
{ name: 'MNFCTUR_ENTRPS', fieldName: '업소수', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'MNFCTUR_BSMN', fieldName: '종사인원(명)', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'mfbizCnt', fieldName: 'mfbizCnt', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'mfbizMdsrNope', fieldName: 'mfbizMdsrNope', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 개인하수처리시설 관리업
{ name: 'MGMT_ENTRPS', fieldName: '업소수', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'MGMT_BSMN', fieldName: '종사인원(명)', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'mngCnt', fieldName: 'mngCnt', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'mngMdsrNope', fieldName: 'mngMdsrNope', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 비고
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
// Hidden: 의견 필드
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
// Hidden: 추가 필드 (화면에 미노출이, DB 저장)
{ name: 'CNSTRCT_FCT_CNT', fieldName: '설계시공시설개수', header: { text: '설계시공시설개수' }, visible: false },
{ name: 'CNSTRCT_FCT_CPCTY', fieldName: '설계시공시설용량', header: { text: '설계시공시설용량' }, visible: false },
{ name: 'MNFCTUR_STTY_CNT', fieldName: '제조정원', header: { text: '제조정원' }, visible: false },
{ name: 'MNFCTUR_WRRTN_CNT', fieldName: '제조권원', header: { text: '제조권원' }, visible: false },
{ name: 'MGMT_STTY_CNT', fieldName: '관리정원', header: { text: '관리정원' }, visible: false },
{ name: 'MGMT_WRRTN_CNT', fieldName: '관리권원', header: { text: '관리권원' }, visible: false },
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
{ name: 'CHK_CNSTRCT_ENTRPS', fieldName: 'CHK_CNSTRCT_ENTRPS', header: { text: 'CHK_CNSTRCT_ENTRPS' }, visible: false },
{ name: 'CHK_CNSTRCT_BSMN', fieldName: 'CHK_CNSTRCT_BSMN', header: { text: 'CHK_CNSTRCT_BSMN' }, visible: false },
{ name: 'CHK_CNSTRCT_FCT_CNT', fieldName: 'CHK_CNSTRCT_FCT_CNT', header: { text: 'CHK_CNSTRCT_FCT_CNT' }, visible: false },
{ name: 'CHK_CNSTRCT_FCT_CPCTY', fieldName: 'CHK_CNSTRCT_FCT_CPCTY', header: { text: 'CHK_CNSTRCT_FCT_CPCTY' }, visible: false },
{ name: 'CHK_MNFCTUR_ENTRPS', fieldName: 'CHK_MNFCTUR_ENTRPS', header: { text: 'CHK_MNFCTUR_ENTRPS' }, visible: false },
{ name: 'CHK_MNFCTUR_BSMN', fieldName: 'CHK_MNFCTUR_BSMN', header: { text: 'CHK_MNFCTUR_BSMN' }, visible: false },
{ name: 'CHK_MNFCTUR_STTY_CNT', fieldName: 'CHK_MNFCTUR_STTY_CNT', header: { text: 'CHK_MNFCTUR_STTY_CNT' }, visible: false },
{ name: 'CHK_MNFCTUR_WRRTN_CNT', fieldName: 'CHK_MNFCTUR_WRRTN_CNT', header: { text: 'CHK_MNFCTUR_WRRTN_CNT' }, visible: false },
{ name: 'CHK_MGMT_ENTRPS', fieldName: 'CHK_MGMT_ENTRPS', header: { text: 'CHK_MGMT_ENTRPS' }, visible: false },
{ name: 'CHK_MGMT_BSMN', fieldName: 'CHK_MGMT_BSMN', header: { text: 'CHK_MGMT_BSMN' }, visible: false },
{ name: 'CHK_MGMT_STTY_CNT', fieldName: 'CHK_MGMT_STTY_CNT', header: { text: 'CHK_MGMT_STTY_CNT' }, visible: false },
{ name: 'CHK_MGMT_WRRTN_CNT', fieldName: 'CHK_MGMT_WRRTN_CNT', header: { text: 'CHK_MGMT_WRRTN_CNT' }, visible: false },
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
],
columnLayout: [
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['SIDO', 'GUGUN']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
{
name: 'group_design_construct',
header: { text: '개인하수처리시설 설계·시공업' },
items: ['CNSTRCT_ENTRPS', 'CNSTRCT_BSMN']
items: ['designMdsrCnt', 'designMdsrNope']
},
{
name: 'group_manufacture',
header: { text: '개인하수처리시설 제조업' },
items: ['MNFCTUR_ENTRPS', 'MNFCTUR_BSMN']
items: ['mfbizCnt', 'mfbizMdsrNope']
},
{
name: 'group_management',
header: { text: '개인하수처리시설 관리업' },
items: ['MGMT_ENTRPS', 'MGMT_BSMN']
items: ['mngCnt', 'mngMdsrNope']
},
'RMK'
'rmrk',
'admdstCd',
'admdstNm',
],
rowStartNum: 2,
fixedColumns: 1,
tabKey: 'privateSewageTreatRelatedIndustryInp',
fixedColumns: 0,
tabKey: 'ST00120004',
tabLabel: '개인하수처리관련업'
};
@@ -5,86 +5,107 @@ import { ValueType } from "realgrid";
export const PublicInstitutionExcretaIndustryInpColumn = {
columns: [
// 행정구역
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
// 행정코드 (hidden)
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
// 직제
{ name: 'OCGNZ', fieldName: '직 제', header: { text: '직 제' } },
{ name: 'ognzNm', fieldName: 'ognzNm', header: { text: '직 제' } },
// 직원총수
{ name: 'TOT_WTR_QRM', fieldName: '직원총수', header: { text: '직원총수' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{
name: 'empGrssCnt',
fieldName: 'empGrssCnt',
header: { text: '직원총수' },
editable: false,
footer: footerInt,
valueType: ValueType.NUMBER,
dataFormat: '#,##0',
styleName: 'rg-cell-total',
computed: {
fields: ['engrkCnt', 'mchnCnt', 'prvtmCnt', 'chmengCnt', 'envCnt', 'enjbEtcCnt', 'etcCnt'],
type: 'sum' as const,
},
},
// 행정직
{ name: 'ADMINIST_JSSFC', fieldName: '행정직', header: { text: '행정직' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'pbadmsNope', fieldName: 'pbadmsNope', header: { text: '행정직' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 기술직
{ name: 'TCHNLGY_JSSFC_SM', fieldName: '계', header: { text: '계' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'ENGRK_JSSFC', fieldName: '토목', header: { text: '토목' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'MCHN_JSSFC', fieldName: '기계', header: { text: '기계' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'ELCTY_JSSFC', fieldName: '전기', header: { text: '전기' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'CHMSTRY_JSSFC', fieldName: '화공', header: { text: '화공' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'ENVRN_JSSFC', fieldName: '환경', header: { text: '환경' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'TCHNLGY_ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 기능직 (hidden)
{ name: 'TCNSRV', fieldName: '기능직', header: { text: '기능직' }, visible: false },
{
name: 'techWholNope',
fieldName: 'techWholNope',
header: { text: '계' },
editable: false,
footer: footerInt,
valueType: ValueType.NUMBER,
dataFormat: '#,##0',
styleName: 'rg-cell-total',
computed: {
fields: ['engrkCnt', 'mchnCnt', 'prvtmCnt', 'chmengCnt', 'envCnt', 'enjbEtcCnt'],
type: 'sum' as const,
},
},
{ name: 'engrkCnt', fieldName: 'engrkCnt', header: { text: '토목' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'mchnCnt', fieldName: 'mchnCnt', header: { text: '기계' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'prvtmCnt', fieldName: 'prvtmCnt', header: { text: '전기' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'chmengCnt', fieldName: 'chmengCnt', header: { text: '화공' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'envCnt', fieldName: 'envCnt', header: { text: '환경' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'enjbEtcCnt', fieldName: 'enjbEtcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 기타
{ name: 'ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'etcCnt', fieldName: 'etcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 비고
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
// Hidden: 의견 필드
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
{ name: 'CHK_OCGNZ', fieldName: 'CHK_OCGNZ', header: { text: 'CHK_OCGNZ' }, visible: false },
{ name: 'CHK_TOT_WTR_QRM', fieldName: 'CHK_TOT_WTR_QRM', header: { text: 'CHK_TOT_WTR_QRM' }, visible: false },
{ name: 'CHK_ADMINIST_JSSFC', fieldName: 'CHK_ADMINIST_JSSFC', header: { text: 'CHK_ADMINIST_JSSFC' }, visible: false },
{ name: 'CHK_TCHNLGY_JSSFC_SM', fieldName: 'CHK_TCHNLGY_JSSFC_SM', header: { text: 'CHK_TCHNLGY_JSSFC_SM' }, visible: false },
{ name: 'CHK_ENGRK_JSSFC', fieldName: 'CHK_ENGRK_JSSFC', header: { text: 'CHK_ENGRK_JSSFC' }, visible: false },
{ name: 'CHK_MCHN_JSSFC', fieldName: 'CHK_MCHN_JSSFC', header: { text: 'CHK_MCHN_JSSFC' }, visible: false },
{ name: 'CHK_ELCTY_JSSFC', fieldName: 'CHK_ELCTY_JSSFC', header: { text: 'CHK_ELCTY_JSSFC' }, visible: false },
{ name: 'CHK_CHMSTRY_JSSFC', fieldName: 'CHK_CHMSTRY_JSSFC', header: { text: 'CHK_CHMSTRY_JSSFC' }, visible: false },
{ name: 'CHK_ENVRN_JSSFC', fieldName: 'CHK_ENVRN_JSSFC', header: { text: 'CHK_ENVRN_JSSFC' }, visible: false },
{ name: 'CHK_TCHNLGY_ETC', fieldName: 'CHK_TCHNLGY_ETC', header: { text: 'CHK_TCHNLGY_ETC' }, visible: false },
{ name: 'CHK_TCNSRV', fieldName: 'CHK_TCNSRV', header: { text: 'CHK_TCNSRV' }, visible: false },
{ name: 'CHK_ETC', fieldName: 'CHK_ETC', header: { text: 'CHK_ETC' }, visible: false },
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
{ name: 'ognzSn', fieldName: 'ognzSn', header: { text: '조직일련번호' }, visible: false },
{
name: '__isNewArticle',
fieldName: '__isNewArticle',
header: { text: '신규항목' },
visible: false,
editable: false,
valueType: ValueType.NUMBER,
},
],
columnLayout: [
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['SIDO', 'GUGUN']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'OCGNZ',
'TOT_WTR_QRM',
'ADMINIST_JSSFC',
'ognzNm',
'empGrssCnt',
'pbadmsNope',
{
name: 'group_technology',
header: { text: '기술직' },
items: [
'TCHNLGY_JSSFC_SM',
'ENGRK_JSSFC',
'MCHN_JSSFC',
'ELCTY_JSSFC',
'CHMSTRY_JSSFC',
'ENVRN_JSSFC',
'TCHNLGY_ETC'
'techWholNope',
'engrkCnt',
'mchnCnt',
'prvtmCnt',
'chmengCnt',
'envCnt',
'enjbEtcCnt'
]
},
'ETC',
'RMK'
'etcCnt',
'rmrk',
'admdstCd',
'admdstNm',
'ognzSn',
'__isNewArticle',
],
rowStartNum: 2,
fixedColumns: 0,
tabKey: 'publicInstitutionExcretaIndustryInp',
tabKey: 'ST00120002',
tabLabel: '공공기관 분뇨분야'
};
@@ -5,86 +5,107 @@ import { ValueType } from "realgrid";
export const PublicInstitutionSewerIndustryInpColumn = {
columns: [
// 행정구역
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
// 행정코드 (hidden)
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
// 직제
{ name: 'OCGNZ', fieldName: '직 제', header: { text: '직 제' } },
{ name: 'ognzNm', fieldName: 'ognzNm', header: { text: '직 제' } },
// 직원총수
{ name: 'TOT_WTR_QRM', fieldName: '직원총수', header: { text: '직원총수' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{
name: 'empGrssCnt',
fieldName: 'empGrssCnt',
header: { text: '직원총수' },
editable: false,
footer: footerInt,
valueType: ValueType.NUMBER,
dataFormat: '#,##0',
styleName: 'rg-cell-total',
computed: {
fields: ['engrkCnt', 'mchnCnt', 'prvtmCnt', 'chmengCnt', 'envCnt', 'enjbEtcCnt', 'etcCnt'],
type: 'sum' as const,
},
},
// 행정직
{ name: 'ADMINIST_JSSFC', fieldName: '행정직', header: { text: '행정직' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'pbadmsNope', fieldName: 'pbadmsNope', header: { text: '행정직' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 기술직
{ name: 'TCHNLGY_JSSFC_SM', fieldName: '계', header: { text: '계' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'ENGRK_JSSFC', fieldName: '토목', header: { text: '토목' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'MCHN_JSSFC', fieldName: '기계', header: { text: '기계' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'ELCTY_JSSFC', fieldName: '전기', header: { text: '전기' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'CHMSTRY_JSSFC', fieldName: '화공', header: { text: '화공' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'ENVRN_JSSFC', fieldName: '환경', header: { text: '환경' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'TCHNLGY_ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 기능직 (hidden)
{ name: 'TCNSRV', fieldName: '기능직', header: { text: '기능직' }, visible: false },
{
name: 'techWholNope',
fieldName: 'techWholNope',
header: { text: '계' },
editable: false,
footer: footerInt,
valueType: ValueType.NUMBER,
dataFormat: '#,##0',
styleName: 'rg-cell-total',
computed: {
fields: ['engrkCnt', 'mchnCnt', 'prvtmCnt', 'chmengCnt', 'envCnt', 'enjbEtcCnt'],
type: 'sum' as const,
},
},
{ name: 'engrkCnt', fieldName: 'engrkCnt', header: { text: '토목' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'mchnCnt', fieldName: 'mchnCnt', header: { text: '기계' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'prvtmCnt', fieldName: 'prvtmCnt', header: { text: '전기' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'chmengCnt', fieldName: 'chmengCnt', header: { text: '화공' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'envCnt', fieldName: 'envCnt', header: { text: '환경' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'enjbEtcCnt', fieldName: 'enjbEtcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 기타
{ name: 'ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'etcCnt', fieldName: 'etcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
// 비고
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
// Hidden: 의견 필드
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
{ name: 'CHK_OCGNZ', fieldName: 'CHK_OCGNZ', header: { text: 'CHK_OCGNZ' }, visible: false },
{ name: 'CHK_TOT_WTR_QRM', fieldName: 'CHK_TOT_WTR_QRM', header: { text: 'CHK_TOT_WTR_QRM' }, visible: false },
{ name: 'CHK_ADMINIST_JSSFC', fieldName: 'CHK_ADMINIST_JSSFC', header: { text: 'CHK_ADMINIST_JSSFC' }, visible: false },
{ name: 'CHK_TCHNLGY_JSSFC_SM', fieldName: 'CHK_TCHNLGY_JSSFC_SM', header: { text: 'CHK_TCHNLGY_JSSFC_SM' }, visible: false },
{ name: 'CHK_ENGRK_JSSFC', fieldName: 'CHK_ENGRK_JSSFC', header: { text: 'CHK_ENGRK_JSSFC' }, visible: false },
{ name: 'CHK_MCHN_JSSFC', fieldName: 'CHK_MCHN_JSSFC', header: { text: 'CHK_MCHN_JSSFC' }, visible: false },
{ name: 'CHK_ELCTY_JSSFC', fieldName: 'CHK_ELCTY_JSSFC', header: { text: 'CHK_ELCTY_JSSFC' }, visible: false },
{ name: 'CHK_CHMSTRY_JSSFC', fieldName: 'CHK_CHMSTRY_JSSFC', header: { text: 'CHK_CHMSTRY_JSSFC' }, visible: false },
{ name: 'CHK_ENVRN_JSSFC', fieldName: 'CHK_ENVRN_JSSFC', header: { text: 'CHK_ENVRN_JSSFC' }, visible: false },
{ name: 'CHK_TCHNLGY_ETC', fieldName: 'CHK_TCHNLGY_ETC', header: { text: 'CHK_TCHNLGY_ETC' }, visible: false },
{ name: 'CHK_TCNSRV', fieldName: 'CHK_TCNSRV', header: { text: 'CHK_TCNSRV' }, visible: false },
{ name: 'CHK_ETC', fieldName: 'CHK_ETC', header: { text: 'CHK_ETC' }, visible: false },
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
{ name: 'ognzSn', fieldName: 'ognzSn', header: { text: '조직일련번호' }, visible: false },
{
name: '__isNewArticle',
fieldName: '__isNewArticle',
header: { text: '신규항목' },
visible: false,
editable: false,
valueType: ValueType.NUMBER,
},
],
columnLayout: [
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['SIDO', 'GUGUN']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'OCGNZ',
'TOT_WTR_QRM',
'ADMINIST_JSSFC',
'ognzNm',
'empGrssCnt',
'pbadmsNope',
{
name: 'group_technology',
header: { text: '기술직' },
items: [
'TCHNLGY_JSSFC_SM',
'ENGRK_JSSFC',
'MCHN_JSSFC',
'ELCTY_JSSFC',
'CHMSTRY_JSSFC',
'ENVRN_JSSFC',
'TCHNLGY_ETC'
'techWholNope',
'engrkCnt',
'mchnCnt',
'prvtmCnt',
'chmengCnt',
'envCnt',
'enjbEtcCnt'
]
},
'ETC',
'RMK'
'etcCnt',
'rmrk',
'admdstCd',
'admdstNm',
'ognzSn',
'__isNewArticle',
],
rowStartNum: 2,
fixedColumns: 1,
tabKey: 'publicInstitutionSewerIndustryInp',
fixedColumns: 0,
tabKey: 'ST00120001',
tabLabel: '공공기관 하수분야'
};
@@ -1,91 +1,158 @@
import type { ColumnConfig } from "@/components/type/DataGrid.type";
import { footerDecimal1 } from "@/components/util/grid/footerSummary";
import { ValueType } from "realgrid";
export const DIGESTOR_OPERATING_STATUS_YN_VALUES = ["Y", "N"] as const;
export const DIGESTOR_OPERATING_STATUS_EN_YN_FIELD = "digstnEnYn" as const;
/** 소화조 유/무가 N이면 해당 행의 입력 셀을 잠근다(digstnEnYn 제외). */
export function isDigestorOperatingRowDisabled(
row: Record<string, string | number>,
grid?: { getValue?: (itemIndex: number, fieldName: string) => unknown },
rowIndex?: number,
): boolean {
const live =
grid?.getValue != null && rowIndex != null && rowIndex >= 0
? grid.getValue(rowIndex, DIGESTOR_OPERATING_STATUS_EN_YN_FIELD)
: undefined;
const raw =
live !== undefined && live !== null
? live
: row[DIGESTOR_OPERATING_STATUS_EN_YN_FIELD];
return String(raw ?? "").trim().toUpperCase() === "N";
}
function dropdownColumn(
col: Pick<ColumnConfig, "name" | "fieldName" | "header"> &
Partial<ColumnConfig>,
options: readonly string[],
): ColumnConfig {
const values = [...options];
return {
...col,
values,
labels: values,
lookupDisplay: true,
editor: {
type: "dropdown",
domainOnly: true,
textReadOnly: true,
commitOnSelect: true,
dropDownWhenClick: true,
values,
labels: values,
},
};
}
// 하수도 통계 관리 > 11. 하수 및 분뇨찌꺼기(슬러지)처리 > tab 2. 소화조 운영현황
export const DigestorOperatingStatusInpColumn = {
columns: [
// 행정구역
{ name: 'SIDO_CD', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'ADST_CD', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
// 하수처리장명
{ name: 'BSC_FCT_NM', fieldName: '하수처리장명', header: { text: '하수처리장명' }, editable: false },
{ name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '하수처리장명' }, editable: false },
// 소화조 운영현황
{ name: 'DGSTR_FNNC', fieldName: '소화조 유/무(Y/N)선택', header: { text: '소화조 유/무(Y/N)선택' } },
{ name: 'DGSTR_CPC', fieldName: '설계용량(m³)', header: { text: '설계용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_OPR_CPC', fieldName: '실제운전용량(m³)', header: { text: '실제운전용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_IN', fieldName: '투입량(m³/일)', header: { text: '투입량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_TS', fieldName: '투입 TS 농도(%)', header: { text: '투입 TS 농도(%)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_YRSTP_RN_DYN', fieldName: '가동일수(연간)', header: { text: '가동일수(연간)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_OCCUR_GAS', fieldName: '발생가스량(m³/일)', header: { text: '발생가스량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
dropdownColumn(
{
name: 'digstnEnYn',
fieldName: 'digstnEnYn',
header: { text: '소화조 유/무(Y/N)선택' },
},
DIGESTOR_OPERATING_STATUS_YN_VALUES,
),
{ name: 'digstnCpct', fieldName: 'digstnCpct', header: { text: '설계용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'actlDrvnCpct', fieldName: 'actlDrvnCpct', header: { text: '실제운전용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'digstnGasInputQnt', fieldName: 'digstnGasInputQnt', header: { text: '투입량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'digstnGasInputSldDnst', fieldName: 'digstnGasInputSldDnst', header: { text: '투입 TS 농도(%)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'digstnTnkOprtngDayCnt', fieldName: 'digstnTnkOprtngDayCnt', header: { text: '가동일수(연간)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'ocrnGasQnt', fieldName: 'ocrnGasQnt', header: { text: '발생가스량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 소화조 운영현황 > 소화가스 이용현황(m³/일)
{ name: 'DGSTR_SM', fieldName: '계', header: { text: '계' }, footer: footerDecimal1, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_SLE', fieldName: '판매', header: { text: '판매' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_ELTGNR', fieldName: '발전', header: { text: '발전' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_ONSLF', fieldName: '자체활용', header: { text: '자체활용' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'DGSTR_ETC', fieldName: '기타(CNG등)', header: { text: '기타(CNG등)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'digstnGasUtztnWholPrst',
fieldName: 'digstnGasUtztnWholPrst',
header: { text: '계' },
footer: footerDecimal1,
editable: false,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'digstnGasUtztnNtslQnt',
'digstnGasUtztnEtgtQnt',
'digstnGasUtztnItslfQnt',
'digstnGasUtztnEtcQnt',
],
type: 'sum' as const,
},
},
{ name: 'digstnGasUtztnNtslQnt', fieldName: 'digstnGasUtztnNtslQnt', header: { text: '판매' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'digstnGasUtztnEtgtQnt', fieldName: 'digstnGasUtztnEtgtQnt', header: { text: '발전' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'digstnGasUtztnItslfQnt', fieldName: 'digstnGasUtztnItslfQnt', header: { text: '자체활용' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'digstnGasUtztnEtcQnt', fieldName: 'digstnGasUtztnEtcQnt', header: { text: '기타(CNG등)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 소화조 운영현황 > 잉여가스량
{ name: 'DGSTR_GAS', fieldName: '잉여가스량(m³/일)', header: { text: '잉여가스량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'surplsGasQnt', fieldName: 'surplsGasQnt', header: { text: '잉여가스량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 비고
{ name: 'DGSTR_RMK', fieldName: '비고', header: { text: '비고' } },
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
// Hidden: Check fields for change detection
{ name: 'CHK_DGSTR_FNNC', fieldName: 'CHK_DGSTR_FNNC', header: { text: 'CHK_DGSTR_FNNC' }, visible: false },
{ name: 'CHK_DGSTR_IN', fieldName: 'CHK_DGSTR_IN', header: { text: 'CHK_DGSTR_IN' }, visible: false },
{ name: 'CHK_DGSTR_TS', fieldName: 'CHK_DGSTR_TS', header: { text: 'CHK_DGSTR_TS' }, visible: false },
{ name: 'CHK_DGSTR_YRSTP_RN_DYN', fieldName: 'CHK_DGSTR_YRSTP_RN_DYN', header: { text: 'CHK_DGSTR_YRSTP_RN_DYN' }, visible: false },
{ name: 'CHK_DGSTR_OCCUR_GAS', fieldName: 'CHK_DGSTR_OCCUR_GAS', header: { text: 'CHK_DGSTR_OCCUR_GAS' }, visible: false },
{ name: 'CHK_DGSTR_CPC', fieldName: 'CHK_DGSTR_CPC', header: { text: 'CHK_DGSTR_CPC' }, visible: false },
{ name: 'CHK_DGSTR_OPR_CPC', fieldName: 'CHK_DGSTR_OPR_CPC', header: { text: 'CHK_DGSTR_OPR_CPC' }, visible: false },
{ name: 'CHK_DGSTR_SM', fieldName: 'CHK_DGSTR_SM', header: { text: 'CHK_DGSTR_SM' }, visible: false },
{ name: 'CHK_DGSTR_SLE', fieldName: 'CHK_DGSTR_SLE', header: { text: 'CHK_DGSTR_SLE' }, visible: false },
{ name: 'CHK_DGSTR_ELTGNR', fieldName: 'CHK_DGSTR_ELTGNR', header: { text: 'CHK_DGSTR_ELTGNR' }, visible: false },
{ name: 'CHK_DGSTR_ONSLF', fieldName: 'CHK_DGSTR_ONSLF', header: { text: 'CHK_DGSTR_ONSLF' }, visible: false },
{ name: 'CHK_DGSTR_ETC', fieldName: 'CHK_DGSTR_ETC', header: { text: 'CHK_DGSTR_ETC' }, visible: false },
{ name: 'CHK_DGSTR_GAS', fieldName: 'CHK_DGSTR_GAS', header: { text: 'CHK_DGSTR_GAS' }, visible: false },
// hidden
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
{ name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '처리장코드' }, visible: false },
],
columnLayout: [
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['SIDO_CD', 'ADST_CD']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'BSC_FCT_NM',
'swtrmtFcltNm',
{
name: 'group_digestor_operating',
header: { text: '소화조 운영현황' },
items: [
'DGSTR_FNNC',
'DGSTR_CPC',
'DGSTR_OPR_CPC',
'DGSTR_IN',
'DGSTR_TS',
'DGSTR_YRSTP_RN_DYN',
'DGSTR_OCCUR_GAS',
'digstnEnYn',
'digstnCpct',
'actlDrvnCpct',
'digstnGasInputQnt',
'digstnGasInputSldDnst',
'digstnTnkOprtngDayCnt',
'ocrnGasQnt',
{
name: 'group_gas_usage',
header: { text: '소화가스 이용현황(m³/일)' },
items: [
'DGSTR_SM',
'DGSTR_SLE',
'DGSTR_ELTGNR',
'DGSTR_ONSLF',
'DGSTR_ETC'
'digstnGasUtztnWholPrst',
'digstnGasUtztnNtslQnt',
'digstnGasUtztnEtgtQnt',
'digstnGasUtztnItslfQnt',
'digstnGasUtztnEtcQnt'
]
},
'DGSTR_GAS'
'surplsGasQnt'
]
},
'DGSTR_RMK'
'rmrk',
'admdstCd',
'admdstNm',
'fcltSn',
'swtrmtFcltCd'
],
rowStartNum: 3,
fixedColumns: 0,
tabKey: 'digestorOperatingStatusInp',
tabKey: 'ST00110002',
tabLabel: '소화조 운영현황'
};
@@ -5,79 +5,116 @@ import { ValueType } from "realgrid";
export const ExcretaSlurgeProcessingStatusInpColumn = {
columns: [
// 행정구역
{ name: 'SIDO_CD', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'ADST_CD', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
// 분뇨처리장명
{ name: 'ECSCS_NM', fieldName: '분 뇨 처리장명', header: { text: '분 뇨 처리장명' }, editable: false },
{ name: 'fcltNm', fieldName: 'fcltNm', header: { text: '분뇨 처리장명' }, editable: false },
// 발생량
{ name: 'OCTY', fieldName: '발생량 (A)=(B)+(C)', header: { text: '발생량 (A)=(B)+(C)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'gnam',
fieldName: 'gnam',
header: { text: '발생량 (A)=(B)+(C)' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'rcycQnt',
'olandLfvlm',
'incnrQnt',
'oceanInputQnt',
'fuelQnt',
'etcQnt',
'nondspsQnt'
],
type: 'sum' as const,
},
},
// 처 분 량(톤/년)
{ name: 'PROCESS_CPCTY_SM', fieldName: '계(B)', header: { text: '계(B)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'RUSE', fieldName: '재활용', header: { text: '재활용' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'LAND_RCLM', fieldName: '육상매립', header: { text: '육상매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'INCNR', fieldName: '소각', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'OCEAN_DPSL', fieldName: '해양투기', header: { text: '해양투기' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'FUEL', fieldName: '연료화', header: { text: '연료화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'ETC', fieldName: '기타', header: { text: '기타' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'wholDspsQnt',
fieldName: 'wholDspsQnt',
header: { text: '계(B)' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'rcycQnt',
'olandLfvlm',
'incnrQnt',
'oceanInputQnt',
'fuelQnt',
'etcQnt',
],
type: 'sum' as const,
},
},
{ name: 'rcycQnt', fieldName: 'rcycQnt', header: { text: '재활용' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'olandLfvlm', fieldName: 'olandLfvlm', header: { text: '육상매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'incnrQnt', fieldName: 'incnrQnt', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'oceanInputQnt', fieldName: 'oceanInputQnt', header: { text: '해양투기' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'fuelQnt', fieldName: 'fuelQnt', header: { text: '연료화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'etcQnt', fieldName: 'etcQnt', header: { text: '기타' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 미처분량(이월량)(C)
{ name: 'CYFD_CPCTY', fieldName: '미처분량(이월량)(C)', header: { text: '미처분량(이월량)(C)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'nondspsQnt', fieldName: 'nondspsQnt', header: { text: '미처분량(이월량)(C)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 타시설연계여부
{ name: 'OUT_BSC_FCT_NM', fieldName: '타시설연계여부', header: { text: '타시설연계여부' } },
{ name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '타시설연계여부' } },
// 비고
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
// Hidden: 의견
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
// Hidden: Check fields for change detection
{ name: 'CHK_ECSCS_NM', fieldName: 'CHK_ECSCS_NM', header: { text: 'CHK_ECSCS_NM' }, visible: false },
{ name: 'CHK_OCTY', fieldName: 'CHK_OCTY', header: { text: 'CHK_OCTY' }, visible: false },
{ name: 'CHK_PROCESS_CPCTY_SM', fieldName: 'CHK_PROCESS_CPCTY_SM', header: { text: 'CHK_PROCESS_CPCTY_SM' }, visible: false },
{ name: 'CHK_RUSE', fieldName: 'CHK_RUSE', header: { text: 'CHK_RUSE' }, visible: false },
{ name: 'CHK_LAND_RCLM', fieldName: 'CHK_LAND_RCLM', header: { text: 'CHK_LAND_RCLM' }, visible: false },
{ name: 'CHK_INCNR', fieldName: 'CHK_INCNR', header: { text: 'CHK_INCNR' }, visible: false },
{ name: 'CHK_OCEAN_DPSL', fieldName: 'CHK_OCEAN_DPSL', header: { text: 'CHK_OCEAN_DPSL' }, visible: false },
{ name: 'CHK_FUEL', fieldName: 'CHK_FUEL', header: { text: 'CHK_FUEL' }, visible: false },
{ name: 'CHK_ETC', fieldName: 'CHK_ETC', header: { text: 'CHK_ETC' }, visible: false },
{ name: 'CHK_CYFD_CPCTY', fieldName: 'CHK_CYFD_CPCTY', header: { text: 'CHK_CYFD_CPCTY' }, visible: false },
{ name: 'CHK_OUT_BSC_FCT_NM', fieldName: 'CHK_OUT_BSC_FCT_NM', header: { text: 'CHK_OUT_BSC_FCT_NM' }, visible: false },
// hidden
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
{ name: 'fcltPstnCn', fieldName: 'fcltPstnCn', header: { text: '시설물위치내용' }, visible: false },
],
columnLayout: [
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['SIDO_CD', 'ADST_CD']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'ECSCS_NM',
'OCTY',
'fcltNm',
'gnam',
{
name: 'group_process_amount',
header: { text: '처 분 량(톤/년)' },
items: [
'PROCESS_CPCTY_SM',
'RUSE',
'LAND_RCLM',
'INCNR',
'OCEAN_DPSL',
'FUEL',
'ETC'
'wholDspsQnt',
'rcycQnt',
'olandLfvlm',
'incnrQnt',
'oceanInputQnt',
'fuelQnt',
'etcQnt'
]
},
'CYFD_CPCTY',
'OUT_BSC_FCT_NM',
'RMK'
'nondspsQnt',
'swtrmtFcltNm',
'rmrk',
'admdstCd',
'admdstNm',
'fcltSn',
'fcltPstnCn'
],
rowStartNum: 2,
fixedColumns: 2,
tabKey: 'excretaSlurgeProcessingStatusInp',
tabKey: 'ST00110004',
tabLabel: '분뇨찌꺼기(슬러지)처리현황'
};
@@ -5,22 +5,37 @@ import { ValueType } from "realgrid";
export const SewageSlurgeProcessingFacStatusInpColumn = {
columns: [
// 행정구역
{ name: 'SIDO_CD', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'ADST_CD', fieldName: '시군구', header: { text: '시군구' }, footer: { text: '합계' } },
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, styleName: 'rg-cell-readonly' },
// 찌꺼기처리시설명
{ name: 'SLG_FCT_NM', fieldName: '찌꺼기처리시설명', header: { text: '찌꺼기처리시설명' } },
{ name: 'fcltNm', fieldName: 'fcltNm', header: { text: '찌꺼기처리시설명' } },
// 처리시설 운영현황
{ name: 'TRT_METHOD', fieldName: '처리방식', header: { text: '처리방식' } },
{ name: 'SLG_FCT_CPC', fieldName: '시설용량(톤/일)', header: { text: '시설용량(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'OPR_CPC', fieldName: '연간처리량(톤/년)', header: { text: '연간처리량(톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'ODY_RN_TIME', fieldName: '일평균가동시간(1~24)', header: { text: '일평균가동시간(1~24)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'YRSTP_RN_DYN', fieldName: '연중 가동일(1~330)', header: { text: '연중 가동일(1~330)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'OPR_RT', fieldName: '가동율(%)', header: { text: '가동율(%)' }, footer: footerDecimal1, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'prcsMthExpln', fieldName: 'prcsMthExpln', header: { text: '처리방식' } },
{ name: 'fcltCpct', fieldName: 'fcltCpct', header: { text: '시설용량(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'anlPrcsQnt', fieldName: 'anlPrcsQnt', header: { text: '연간처리량(톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'dayAvgOprtngHr', fieldName: 'dayAvgOprtngHr', header: { text: '일평균가동시간(1~24)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{ name: 'anlOprtngDayCnt', fieldName: 'anlOprtngDayCnt', header: { text: '연중 가동일(1~330)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
{
name: 'oprtngRt',
fieldName: 'oprtngRt',
header: { text: '가동율(%)' },
footer: footerDecimal1,
editable: false,
styleName: 'rg-cell-total',
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
computed: {
numeratorField: 'anlPrcsQnt',
denominatorField: 'fcltCpct',
multiplierField: 'anlOprtngDayCnt',
type: 'quotientTimesMultiplierPercent' as const,
},
},
// 비고
{ name: 'SLG_FCT_RMK', fieldName: '비고', header: { text: '비고' } },
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
// Hidden: 기본 정보
{ name: 'STPN_SEQ', fieldName: 'STPN_SEQ', header: { text: 'STPN_SEQ' }, visible: false },
@@ -30,40 +45,42 @@ export const SewageSlurgeProcessingFacStatusInpColumn = {
{ name: 'BSNM_CD', fieldName: 'BSNM_CD', header: { text: 'BSNM_CD' }, visible: false },
{ name: 'BSC_FCT_CD', fieldName: 'BSC_FCT_CD', header: { text: 'BSC_FCT_CD' }, visible: false },
// Hidden: Check fields for change detection
{ name: 'CHK_SLG_FCT_NM', fieldName: 'CHK_SLG_FCT_NM', header: { text: 'CHK_SLG_FCT_NM' }, visible: false },
{ name: 'CHK_TRT_METHOD', fieldName: 'CHK_TRT_METHOD', header: { text: 'CHK_TRT_METHOD' }, visible: false },
{ name: 'CHK_SLG_FCT_CPC', fieldName: 'CHK_SLG_FCT_CPC', header: { text: 'CHK_SLG_FCT_CPC' }, visible: false },
{ name: 'CHK_OPR_CPC', fieldName: 'CHK_OPR_CPC', header: { text: 'CHK_OPR_CPC' }, visible: false },
{ name: 'CHK_ODY_RN_TIME', fieldName: 'CHK_ODY_RN_TIME', header: { text: 'CHK_ODY_RN_TIME' }, visible: false },
{ name: 'CHK_YRSTP_RN_DYN', fieldName: 'CHK_YRSTP_RN_DYN', header: { text: 'CHK_YRSTP_RN_DYN' }, visible: false },
{ name: 'CHK_OPR_RT', fieldName: 'CHK_OPR_RT', header: { text: 'CHK_OPR_RT' }, visible: false },
// hidden
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
],
columnLayout: [
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['SIDO_CD', 'ADST_CD']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'SLG_FCT_NM',
'fcltNm',
{
name: 'group_processing_fac_operating',
header: { text: '처리시설 운영현황' },
items: [
'TRT_METHOD',
'SLG_FCT_CPC',
'OPR_CPC',
'ODY_RN_TIME',
'YRSTP_RN_DYN',
'OPR_RT'
'prcsMthExpln',
'fcltCpct',
'anlPrcsQnt',
'dayAvgOprtngHr',
'anlOprtngDayCnt',
'oprtngRt'
]
},
'SLG_FCT_RMK'
'rmrk',
'admdstCd',
'admdstNm',
'fcltSn',
],
rowStartNum: 2,
fixedColumns: 1,
tabKey: 'sewageSlurgeProcessingFacStatusInp',
tabKey: 'ST00110003',
tabLabel: '하수찌꺼기 처리시설 운영현황'
};
@@ -5,212 +5,357 @@ import { ValueType } from "realgrid";
export const SlurgeProcessingFacStatusInpColumn = {
columns: [
// 행정구역
{ name: 'SIDO_CD', fieldName: '시도', header: { text: '시도' }, editable: false },
{ name: 'ADST_CD', fieldName: '시군구', header: { text: '시군구' }, footer: { text: '합계' } },
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
// 하수처리장명
{ name: 'BSC_FCT_NM', fieldName: '하수처리장명', header: { text: '하수처리장명' }, },
{ name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '하수처리장명' }, editable: false, styleName: 'rg-cell-readonly' },
// 찌꺼기발생량(톤/년, 탈수기준)
{ name: 'TOT_AMNT', fieldName: '합계', header: { text: '합계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'P_AMNT', fieldName: '자체', header: { text: '자체' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'OUT_AMNT', fieldName: '외부유입량', header: { text: '외부유입량' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'gnamWhol',
fieldName: 'gnamWhol',
header: { text: '합계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: ['itslfQnt', 'otsdInflwQnt'],
type: 'sum' as const,
},
},
{ name: 'itslfQnt', fieldName: 'itslfQnt', header: { text: '자체' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'otsdInflwQnt', fieldName: 'otsdInflwQnt', header: { text: '외부유입량' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 이송처리장
{ name: 'OUT_FCT_NM', fieldName: '이송처리장', header: { text: '이송처리장' } },
{ name: 'transfTmplntNm', fieldName: 'transfTmplntNm', header: { text: '이송처리장' } },
// 이송처리량 - 쿼리에서 못찾음 (임의)
{ name: 'a', fieldName: '이송처리량(m³/년)', header: { text: '이송처리량(m³/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'transfPrcsQnt', fieldName: 'transfPrcsQnt', header: { text: '이송처리량(m³/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 함수율
{ name: 'DSP_MOIRAT', fieldName: '함수율(%, 탈수기준)', header: { text: '함수율(%, 탈수기준)' }, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'srpFncRt', fieldName: 'srpFncRt', header: { text: '함수율(%, 탈수기준)' }, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 찌꺼기처리량합계
{ name: 'DSP_SM', fieldName: '찌꺼기처리량합계(톤/년)', header: { text: '찌꺼기처리량합계(톤/년)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'wholSrpPrcsQnt',
fieldName: 'wholSrpPrcsQnt',
header: { text: '찌꺼기처리량합계(톤/년)' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'itslfTs1RclmQnt',
'itslfTs1IncnrQnt',
'itslfTs1AltdQnt',
'itslfTs1DryQnt',
'itslfTs1FuelQnt',
'itslfTs2CmpstgQnt',
'otsdCnsgnRclmQnt',
'otsdCnsgnIncnrQnt',
'otsdCnsgnFuelPwplQnt',
'otsdCnsgnPrdctRmtrlQnt',
'otsdCnsgnFmlyrQnt',
'otsdCnsgnCmpstgQnt',
'cparTs1Whol',
],
type: 'sum' as const,
}
},
// 자체 찌꺼기 처리량 > 자체찌꺼기처리량소계
{ name: 'DSP_SELF_SM', fieldName: '자체찌꺼기처리량소계', header: { text: '자체찌꺼기처리량소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'itslfTs1Whol',
fieldName: 'itslfTs1Whol',
header: { text: '자체찌꺼기처리량소계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'itslfTs1RclmQnt',
'itslfTs1IncnrQnt',
'itslfTs1AltdQnt',
'itslfTs1DryQnt',
'itslfTs1FuelQnt',
'itslfTs2CmpstgQnt',
],
type: 'sum' as const,
}
},
// 자체 찌꺼기 처리량 > 매립
{ name: 'O_DSP_RCLM', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'itslfTs1RclmQnt', fieldName: 'itslfTs1RclmQnt', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 자체 찌꺼기 처리량 > 소각(1차)
{ name: 'O_DSP_INCNR', fieldName: '소각(1차)', header: { text: '소각(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'itslfTs1IncnrQnt', fieldName: 'itslfTs1IncnrQnt', header: { text: '소각(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 자체 찌꺼기 처리량 > 소각 후 처리(2차) - 쿼리에 없음 (임의 생성)
{ name: 'b1', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'b2', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'b3', fieldName: '제품원료', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'b4', fieldName: '복토재', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'b5', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
{
name: 'incnrPrcsWhol',
fieldName: 'incnrPrcsWhol',
header: { text: '소계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'incnrPrcsLfvlm',
'incnrPrcsPrdctRmtrlQnt',
'incnrPrcsFmlyrQnt',
],
type: 'sum' as const,
}
},
{ name: 'incnrPrcsLfvlm', fieldName: 'incnrPrcsLfvlm', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'incnrPrcsPrdctRmtrlQnt', fieldName: 'incnrPrcsPrdctRmtrlQnt', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'incnrPrcsFmlyrQnt', fieldName: 'incnrPrcsFmlyrQnt', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'incnrPrcsFcltNm', fieldName: 'incnrPrcsFcltNm', header: { text: '시설(업체명)' } },
// 자체 찌꺼기 처리량 > 고화(1차) - 쿼리에 없음 (임의 생성)
{ name: 'c1', fieldName: '고화(1차)', header: { text: '고화(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'itslfTs1AltdQnt', fieldName: 'itslfTs1AltdQnt', header: { text: '고화(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 자체 찌꺼기 처리량 > 고화 후 처리(2차) - 쿼리에 없음 (임의 생성)
{ name: 'c2', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'c3', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'c4', fieldName: '복토재', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'c5', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
{
name: 'stbznPrcsWhol',
fieldName: 'stbznPrcsWhol',
header: { text: '소계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'stbznPrcsLfvlm',
'stbznPrcsFmlyrQnt',
],
type: 'sum' as const,
}
},
{ name: 'stbznPrcsLfvlm', fieldName: 'stbznPrcsLfvlm', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'stbznPrcsFmlyrQnt', fieldName: 'stbznPrcsFmlyrQnt', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'stbznPrcsFcltNm', fieldName: 'stbznPrcsFcltNm', header: { text: '시설(업체명)' } },
// 자체 찌꺼기 처리량 > 건조(1차)
{ name: 'DSP_DESIC', fieldName: '건조(1차)', header: { text: '건조(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'itslfTs1DryQnt', fieldName: 'itslfTs1DryQnt', header: { text: '건조(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 자체 찌꺼기 처리량 > 건조 후 처리(2차) - 쿼리에 없음
{ name: 'd1', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'd2', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'd3', fieldName: '소각', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'd4', fieldName: '연료', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'd5', fieldName: '제품원료', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'd6', fieldName: '복토재', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'd7', fieldName: '퇴비화', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'd8', fieldName: '시설(업체명)', header: { text: '시설(업체명)' }, editable: true },
{
name: 'dryPrcsWhol',
fieldName: 'dryPrcsWhol',
header: { text: '소계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'dryPrcsLfvlm',
'dryPrcsIncnrQnt',
'dryPrcsFuelQnt',
'dryPrcsPrdctRmtrlQnt',
'dryPrcsFmlyrQnt',
'dryPrcsCmpstgQnt',
],
type: 'sum' as const,
}
},
{ name: 'dryPrcsLfvlm', fieldName: 'dryPrcsLfvlm', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'dryPrcsIncnrQnt', fieldName: 'dryPrcsIncnrQnt', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'dryPrcsFuelQnt', fieldName: 'dryPrcsFuelQnt', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'dryPrcsPrdctRmtrlQnt', fieldName: 'dryPrcsPrdctRmtrlQnt', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'dryPrcsFmlyrQnt', fieldName: 'dryPrcsFmlyrQnt', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'dryPrcsCmpstgQnt', fieldName: 'dryPrcsCmpstgQnt', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'dryPrcsFcltNm', fieldName: 'dryPrcsFcltNm', header: { text: '시설(업체명)' }, editable: true },
// 자체 찌꺼기 처리량 > 탄화(1차) - 쿼리에 없음 (임의 생성)
{ name: 'e1', fieldName: '탄화(1차)', header: { text: '탄화(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'itslfTs1FuelQnt', fieldName: 'itslfTs1FuelQnt', header: { text: '탄화(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 자체 찌꺼기 처리량 > 탄화 후 처리(2차) - 쿼리에 없음 (임의 생성)
{ name: 'e2', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'e3', fieldName: '소각', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'e4', fieldName: '연료', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'e5', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
{
name: 'fuelPrcsWhol',
fieldName: 'fuelPrcsWhol',
header: { text: '소계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: ['fuelPrcsIncnrQnt', 'fuelPrcsFuelQnt'],
type: 'sum' as const,
}
},
{ name: 'fuelPrcsIncnrQnt', fieldName: 'fuelPrcsIncnrQnt', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'fuelPrcsFuelQnt', fieldName: 'fuelPrcsFuelQnt', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'fuelPrcsFcltNm', fieldName: 'fuelPrcsFcltNm', header: { text: '시설(업체명)' } },
// 자체 찌꺼기 처리량 > 퇴비화 - 쿼리에 없음 (임의 생성)
{ name: 'f1', fieldName: '퇴비화', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'itslfTs2CmpstgQnt', fieldName: 'itslfTs2CmpstgQnt', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 자체 찌꺼기 처리량 > 퇴비화 > 시설(업체명) - 쿼리에 없음 (임의 생성)
{ name: 'f2', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
{ name: 'cmpsPrcsFcltBzentyNm', fieldName: 'cmpsPrcsFcltBzentyNm', header: { text: '시설(업체명)' } },
// 외부위탁 처리량(톤/년)
{ name: 'DSP_CONSIGNMENT', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'g1', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'g2', fieldName: '소각', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'g3', fieldName: '연료', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'g4', fieldName: '제품원료', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'g5', fieldName: '복토재', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'g6', fieldName: '퇴비화', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'g7', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
{
name: 'otsdCnsgnWhol',
fieldName: 'otsdCnsgnWhol',
header: { text: '소계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'otsdCnsgnRclmQnt',
'otsdCnsgnIncnrQnt',
'otsdCnsgnFuelPwplQnt',
'otsdCnsgnPrdctRmtrlQnt',
'otsdCnsgnFmlyrQnt',
'otsdCnsgnCmpstgQnt',
],
type: 'sum' as const,
}
},
{ name: 'otsdCnsgnRclmQnt', fieldName: 'otsdCnsgnRclmQnt', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'otsdCnsgnIncnrQnt', fieldName: 'otsdCnsgnIncnrQnt', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'otsdCnsgnFuelPwplQnt', fieldName: 'otsdCnsgnFuelPwplQnt', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'otsdCnsgnPrdctRmtrlQnt', fieldName: 'otsdCnsgnPrdctRmtrlQnt', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'otsdCnsgnFmlyrQnt', fieldName: 'otsdCnsgnFmlyrQnt', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'otsdCnsgnCmpstgQnt', fieldName: 'otsdCnsgnCmpstgQnt', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'otsdCnsgnFcltNm', fieldName: 'otsdCnsgnFcltNm', header: { text: '시설(업체명)' } },
// 수도권광역위탁처리량
{ name: 'DSP_WIDE', fieldName: '수도권광역위탁처리량(톤/년)', header: { text: '수도권광역위탁처리량(톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{ name: 'cparTs1Whol', fieldName: 'cparTs1Whol', header: { text: '수도권광역위탁처리량(톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 비고
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
// Hidden: Check fields
{ name: 'CHK_TOT_AMNT', fieldName: 'CHK_TOT_AMNT', header: { text: 'CHK_TOT_AMNT' }, visible: false },
{ name: 'CHK_P_AMNT', fieldName: 'CHK_P_AMNT', header: { text: 'CHK_P_AMNT' }, visible: false },
{ name: 'CHK_OUT_AMNT', fieldName: 'CHK_OUT_AMNT', header: { text: 'CHK_OUT_AMNT' }, visible: false },
{ name: 'CHK_DSP_MOIRAT', fieldName: 'CHK_DSP_MOIRAT', header: { text: 'CHK_DSP_MOIRAT' }, visible: false },
{ name: 'CHK_DSP_SM', fieldName: 'CHK_DSP_SM', header: { text: 'CHK_DSP_SM' }, visible: false },
{ name: 'CHK_DSP_SELF_SM', fieldName: 'CHK_DSP_SELF_SM', header: { text: 'CHK_DSP_SELF_SM' }, visible: false },
{ name: 'CHK_O_DSP_RCLM', fieldName: 'CHK_O_DSP_RCLM', header: { text: 'CHK_O_DSP_RCLM' }, visible: false },
{ name: 'CHK_O_DSP_INCNR', fieldName: 'CHK_O_DSP_INCNR', header: { text: 'CHK_O_DSP_INCNR' }, visible: false },
{ name: 'CHK_DSP_DESIC', fieldName: 'CHK_DSP_DESIC', header: { text: 'CHK_DSP_DESIC' }, visible: false },
{ name: 'CHK_DSP_CONSIGNMENT', fieldName: 'CHK_DSP_CONSIGNMENT', header: { text: 'CHK_DSP_CONSIGNMENT' }, visible: false },
{ name: 'CHK_DSP_WIDE', fieldName: 'CHK_DSP_WIDE', header: { text: 'CHK_DSP_WIDE' }, visible: false },
{ name: 'CHK_OUT_FCT_NM', fieldName: 'CHK_OUT_FCT_NM', header: { text: 'CHK_OUT_FCT_NM' }, visible: false },
// hidden
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
{ name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '처리장코드' }, visible: false },
],
columnLayout: [
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['SIDO_CD', 'ADST_CD']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'BSC_FCT_NM',
'swtrmtFcltNm',
{
name: 'group_occur_amount',
header: { text: '찌꺼기발생량(톤/년, 탈수기준)' },
items: [
'TOT_AMNT',
'P_AMNT',
'OUT_AMNT'
'gnamWhol',
'itslfQnt',
'otsdInflwQnt'
]
},
'OUT_FCT_NM',
'a',
'DSP_MOIRAT',
'DSP_SM',
'transfTmplntNm',
'transfPrcsQnt',
'srpFncRt',
'wholSrpPrcsQnt',
{
name: 'group_self_treatment',
header: { text: '자체 찌꺼기 처리량(톤/년)' },
items: [
'DSP_SELF_SM',
'O_DSP_RCLM',
'O_DSP_INCNR',
'itslfTs1Whol',
'itslfTs1RclmQnt',
'itslfTs1IncnrQnt',
{
name: 'group_incinerate_2nd',
header: { text: '소각 후 처리(2차)' },
items: [
'b1',
'b2',
'b3',
'b4',
'b5'
'incnrPrcsWhol',
'incnrPrcsLfvlm',
'incnrPrcsPrdctRmtrlQnt',
'incnrPrcsFmlyrQnt',
'incnrPrcsFcltNm'
]
},
'c1',
'itslfTs1AltdQnt',
{
name: 'group_solidify_2nd',
header: { text: '고화 후 처리(2차)' },
items: [
'c2',
'c3',
'c4',
'c5'
'stbznPrcsWhol',
'stbznPrcsLfvlm',
'stbznPrcsFmlyrQnt',
'stbznPrcsFcltNm'
]
},
'DSP_DESIC',
'itslfTs1DryQnt',
{
name: 'group_drying_2nd',
header: { text: '건조 후 처리(2차)' },
items: [
'd1',
'd2',
'd3',
'd4',
'd5',
'd6',
'd7',
'd8'
'dryPrcsWhol',
'dryPrcsLfvlm',
'dryPrcsIncnrQnt',
'dryPrcsFuelQnt',
'dryPrcsPrdctRmtrlQnt',
'dryPrcsFmlyrQnt',
'dryPrcsCmpstgQnt',
'dryPrcsFcltNm'
]
},
'e1',
'itslfTs1FuelQnt',
{
name: 'group_carbonize_2nd',
header: { text: '탄화 후 처리(2차)' },
items: [
'e2',
'e3',
'e4',
'e5'
'fuelPrcsWhol',
'fuelPrcsIncnrQnt',
'fuelPrcsFuelQnt',
'fuelPrcsFcltNm'
]
},
'f1',
'f2'
'itslfTs2CmpstgQnt',
'cmpsPrcsFcltBzentyNm'
]
},
{
name: 'group_external_treatment',
header: { text: '외부위탁 처리량(톤/년)' },
items: [
'DSP_CONSIGNMENT',
'g1',
'g2',
'g3',
'g4',
'g5',
'g6',
'g7'
'otsdCnsgnWhol',
'otsdCnsgnRclmQnt',
'otsdCnsgnIncnrQnt',
'otsdCnsgnFuelPwplQnt',
'otsdCnsgnPrdctRmtrlQnt',
'otsdCnsgnFmlyrQnt',
'otsdCnsgnCmpstgQnt',
'otsdCnsgnFcltNm'
]
},
'DSP_WIDE',
'RMK'
'cparTs1Whol',
'rmrk',
'admdstCd',
'admdstNm',
'fcltSn',
'swtrmtFcltCd'
],
rowStartNum: 3,
fixedColumns: 2,
tabKey: 'slurgeProcessingFacStatusInp',
tabKey: 'ST00110001',
tabLabel: '찌꺼기(슬러지)처리시설현황'
};
@@ -31,6 +31,25 @@ function dropdownColumn(
};
}
/** 하수처리수 재이용현황(천톤/년) — 장내·장외 세부 항목 합산 필드 */
const PUBLIC_SEWAGE_REUSE_USE_QNT_SUM_FIELDS = [
'ithlClnQty',
'ithlFrzgQty',
'ithlLdhcUswtrQnt',
'ithlDltnUswtrQnt',
'ithlRuswtrQnt',
'ithlEtcQnt',
'ithlUnsdQnt',
'otcntrClnRstrmQnt',
'otcntrWshwtrQnt',
'otcntrLdhcUswtrQnt',
'otcntrHdrplUswtrQnt',
'otcntrRvrKeepQnt',
'agrcltUswtrPstnQnt',
'ugwtrChargQnt',
'mdsrUswtrQnt',
] as const;
// 하수도 통계 관리 > 10. 물 재이용 > tab 1: 공공하수처리수 재이용
export const PublicSewageTreatWaterReuseInpColumn = {
columns: [
@@ -102,10 +121,44 @@ export const PublicSewageTreatWaterReuseInpColumn = {
{ name: 'ruswtPumpLen', fieldName: 'ruswtPumpLen', header: { text: '공급펌프(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
// 하수처리수 재이용현황 > 총계
{ name: 'wholUseQnt', fieldName: 'wholUseQnt', header: { text: '총계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'wholUseQnt',
fieldName: 'wholUseQnt',
header: { text: '총계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [...PUBLIC_SEWAGE_REUSE_USE_QNT_SUM_FIELDS],
type: 'sum' as const,
},
},
// 하수처리수 재이용현황 > 장내용수
{ name: 'ithlWshwtrQnt', fieldName: 'ithlWshwtrQnt', header: { text: '계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'ithlWshwtrQnt',
fieldName: 'ithlWshwtrQnt',
header: { text: '계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'ithlClnQty',
'ithlFrzgQty',
'ithlLdhcUswtrQnt',
'ithlDltnUswtrQnt',
'ithlRuswtrQnt',
'ithlEtcQnt',
'ithlUnsdQnt',
],
type: 'sum' as const,
},
},
{ name: 'ithlClnQty', fieldName: 'ithlClnQty', header: { text: '세척수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
{ name: 'ithlFrzgQty', fieldName: 'ithlFrzgQty', header: { text: '냉각수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
{ name: 'ithlLdhcUswtrQnt', fieldName: 'ithlLdhcUswtrQnt', header: { text: '청소수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
@@ -115,7 +168,29 @@ export const PublicSewageTreatWaterReuseInpColumn = {
{ name: 'ithlUnsdQnt', fieldName: 'ithlUnsdQnt', header: { text: '장내기타용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
// 하수처리수 재이용현황 > 장외용수
{ name: 'otcntrUswtrWhol', fieldName: 'otcntrUswtrWhol', header: { text: '계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'otcntrUswtrWhol',
fieldName: 'otcntrUswtrWhol',
header: { text: '계' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
fields: [
'otcntrClnRstrmQnt',
'otcntrWshwtrQnt',
'otcntrLdhcUswtrQnt',
'otcntrHdrplUswtrQnt',
'otcntrRvrKeepQnt',
'agrcltUswtrPstnQnt',
'ugwtrChargQnt',
'mdsrUswtrQnt',
],
type: 'sum' as const,
},
},
{ name: 'otcntrClnRstrmQnt', fieldName: 'otcntrClnRstrmQnt', header: { text: '청소·화장실용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
{ name: 'otcntrWshwtrQnt', fieldName: 'otcntrWshwtrQnt', header: { text: '세척·살수용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
{ name: 'otcntrLdhcUswtrQnt', fieldName: 'otcntrLdhcUswtrQnt', header: { text: '조경용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
@@ -126,7 +201,21 @@ export const PublicSewageTreatWaterReuseInpColumn = {
{ name: 'mdsrUswtrQnt', fieldName: 'mdsrUswtrQnt', header: { text: '공업용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
// 재이용률
{ name: 'rtlztnRt', fieldName: 'rtlztnRt', header: { text: '재이용률(%)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
{
name: 'rtlztnRt',
fieldName: 'rtlztnRt',
header: { text: '재이용률(%)' },
editable: false,
footer: footerDecimal1,
valueType: ValueType.NUMBER,
dataFormat: '#,##0.0',
styleName: 'rg-cell-total',
computed: {
numeratorFields: [...PUBLIC_SEWAGE_REUSE_USE_QNT_SUM_FIELDS],
denominatorFields: ['wholPrcsQnt'],
type: 'pblswrgPopltnSuprtRate' as const,
},
},
// 비고
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
@@ -142,7 +231,10 @@ export const PublicSewageTreatWaterReuseInpColumn = {
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['ctpvNm', 'sggNm']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
{
name: 'group_facility',
@@ -139,7 +139,10 @@ export const RainFallUtilFactStatusInpColumn = {
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['ctpvNm', 'sggNm']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'fcltNm',
'bdstTypCn',
@@ -157,7 +157,10 @@ export const RecycledWaterStatusInpColumn = {
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['ctpvNm', 'sggNm']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'fcltNm',
'bldgSeCn',
@@ -40,7 +40,10 @@ export const TreatWaterReuseBusinessApprStatusInpColumn = {
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['ctpvNm', 'sggNm']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'bplcNm',
'rprsvNm',
@@ -40,7 +40,10 @@ export const TreatWaterReuseDesignConstStatusInpColumn = {
{
name: 'group_admin',
header: { text: '행정구역' },
items: ['ctpvNm', 'sggNm']
items: [
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
'sggNm',
],
},
'bplcNm',
'rprsvNm',
@@ -328,6 +328,25 @@ export function createQuotientValueCallback(fields: string[]): DataFieldValueCal
};
}
/** (numerator / denominator) × multiplier × 100 — 분모 0이면 0 */
export function createQuotientTimesMultiplierPercentValueCallback(
numeratorField: string,
denominatorField: string,
multiplierField: string,
): DataFieldValueCallback {
return (_prod, _dataRow, _fieldName, fieldNamesArr, values) => {
const getVal = (field: string) => {
const idx = fieldNamesArr.indexOf(field);
return idx >= 0 ? toNum(values[idx]) : 0;
};
const denominator = getVal(denominatorField);
if (denominator === 0) return 0;
const quotient = getVal(numeratorField) / denominator;
const multiplier = getVal(multiplierField);
return truncateToFirstDecimal(quotient * multiplier * 100);
};
}
/** 연산 타입에 맞는 valueCallback 반환 */
export function getComputedValueCallback(config: ComputedFieldConfig): DataFieldValueCallback {
switch (config.type) {
@@ -384,5 +403,11 @@ export function getComputedValueCallback(config: ComputedFieldConfig): DataField
config.numeratorFields,
config.denominatorField,
);
case 'quotientTimesMultiplierPercent':
return createQuotientTimesMultiplierPercentValueCallback(
config.numeratorField,
config.denominatorField,
config.multiplierField,
);
}
}
@@ -0,0 +1,163 @@
import { stClient } from "@/shared/api/client";
import { withAuthHeader } from "@/shared/api/with-auth-header";
import { ENDPOINT } from "@/shared/config";
import type {
ExcretaRelatedIndustryApiResponse,
ExcretaRelatedIndustrySaveRequest,
ExcretaRelatedIndustrySubmitRequest,
PrivateSewageTreatRelatedIndustryApiResponse,
PrivateSewageTreatRelatedIndustrySaveRequest,
PrivateSewageTreatRelatedIndustrySubmitRequest,
PublicInstitutionExcretaIndustryApiResponse,
PublicInstitutionExcretaIndustrySaveRequest,
PublicInstitutionExcretaIndustrySubmitRequest,
PublicInstitutionSewerIndustryApiResponse,
PublicInstitutionSewerIndustrySaveRequest,
PublicInstitutionSewerIndustrySubmitRequest,
SewageExcretaRelatedRequestParams,
SewageExcretaRelatedSaveResponse,
SewageExcretaRelatedSubmitResponse,
StatisticsInputSewageExcretaRelatedService,
} from "../../model/input/statistics-input-sewage-excreta-related-interface";
const BASE = `${ENDPOINT.ST_SERVICE.INPUT}/sewage-excreta-related`;
export class StatisticsInputSewageExcretaRelatedApiService
implements StatisticsInputSewageExcretaRelatedService
{
/** 공공기관 하수분야 조회 — ST00120001 */
public async getPublicInstitutionSewerIndustryList(
params: SewageExcretaRelatedRequestParams,
): Promise<PublicInstitutionSewerIndustryApiResponse> {
const response = await stClient.get<PublicInstitutionSewerIndustryApiResponse>(
`${BASE}/public-institution-sewer-industry`,
withAuthHeader({ params }),
);
return response.data;
}
/** 공공기관 하수분야 저장 — ST00120001 */
public async savePublicInstitutionSewerIndustry(
request: PublicInstitutionSewerIndustrySaveRequest,
): Promise<SewageExcretaRelatedSaveResponse> {
const response = await stClient.put<SewageExcretaRelatedSaveResponse>(
`${BASE}/public-institution-sewer-industry/save`,
request,
);
return response.data;
}
/** 공공기관 하수분야 제출 — ST00120001 */
public async submitPublicInstitutionSewerIndustry(
request: PublicInstitutionSewerIndustrySubmitRequest,
): Promise<SewageExcretaRelatedSubmitResponse> {
const response = await stClient.put<SewageExcretaRelatedSubmitResponse>(
`${BASE}/public-institution-sewer-industry/submit`,
request,
);
return response.data;
}
/** 공공기관 분뇨분야 조회 — ST00120002 */
public async getPublicInstitutionExcretaIndustryList(
params: SewageExcretaRelatedRequestParams,
): Promise<PublicInstitutionExcretaIndustryApiResponse> {
const response = await stClient.get<PublicInstitutionExcretaIndustryApiResponse>(
`${BASE}/public-institution-excreta-industry`,
withAuthHeader({ params }),
);
return response.data;
}
/** 공공기관 분뇨분야 저장 — ST00120002 */
public async savePublicInstitutionExcretaIndustry(
request: PublicInstitutionExcretaIndustrySaveRequest,
): Promise<SewageExcretaRelatedSaveResponse> {
const response = await stClient.put<SewageExcretaRelatedSaveResponse>(
`${BASE}/public-institution-excreta-industry/save`,
request,
);
return response.data;
}
/** 공공기관 분뇨분야 제출 — ST00120002 */
public async submitPublicInstitutionExcretaIndustry(
request: PublicInstitutionExcretaIndustrySubmitRequest,
): Promise<SewageExcretaRelatedSubmitResponse> {
const response = await stClient.put<SewageExcretaRelatedSubmitResponse>(
`${BASE}/public-institution-excreta-industry/submit`,
request,
);
return response.data;
}
/** 분뇨수집·운반업 조회 — ST00120003 */
public async getExcretaRelatedIndustryList(
params: SewageExcretaRelatedRequestParams,
): Promise<ExcretaRelatedIndustryApiResponse> {
const response = await stClient.get<ExcretaRelatedIndustryApiResponse>(
`${BASE}/excreta-related-industry`,
withAuthHeader({ params }),
);
return response.data;
}
/** 분뇨수집·운반업 저장 — ST00120003 */
public async saveExcretaRelatedIndustry(
request: ExcretaRelatedIndustrySaveRequest,
): Promise<SewageExcretaRelatedSaveResponse> {
const response = await stClient.put<SewageExcretaRelatedSaveResponse>(
`${BASE}/excreta-related-industry/save`,
request,
);
return response.data;
}
/** 분뇨수집·운반업 제출 — ST00120003 */
public async submitExcretaRelatedIndustry(
request: ExcretaRelatedIndustrySubmitRequest,
): Promise<SewageExcretaRelatedSubmitResponse> {
const response = await stClient.put<SewageExcretaRelatedSubmitResponse>(
`${BASE}/excreta-related-industry/submit`,
request,
);
return response.data;
}
/** 개인하수처리관련업 조회 — ST00120004 */
public async getPrivateSewageTreatRelatedIndustryList(
params: SewageExcretaRelatedRequestParams,
): Promise<PrivateSewageTreatRelatedIndustryApiResponse> {
const response = await stClient.get<PrivateSewageTreatRelatedIndustryApiResponse>(
`${BASE}/private-sewage-treat-related-industry`,
withAuthHeader({ params }),
);
return response.data;
}
/** 개인하수처리관련업 저장 — ST00120004 */
public async savePrivateSewageTreatRelatedIndustry(
request: PrivateSewageTreatRelatedIndustrySaveRequest,
): Promise<SewageExcretaRelatedSaveResponse> {
const response = await stClient.put<SewageExcretaRelatedSaveResponse>(
`${BASE}/private-sewage-treat-related-industry/save`,
request,
);
return response.data;
}
/** 개인하수처리관련업 제출 — ST00120004 */
public async submitPrivateSewageTreatRelatedIndustry(
request: PrivateSewageTreatRelatedIndustrySubmitRequest,
): Promise<SewageExcretaRelatedSubmitResponse> {
const response = await stClient.put<SewageExcretaRelatedSubmitResponse>(
`${BASE}/private-sewage-treat-related-industry/submit`,
request,
);
return response.data;
}
}
export const statisticsInputSewageExcretaRelatedApi =
new StatisticsInputSewageExcretaRelatedApiService();
@@ -0,0 +1,182 @@
import { stClient } from "@/shared/api/client";
import { withAuthHeader } from "@/shared/api/with-auth-header";
import { ENDPOINT } from "@/shared/config";
import type {
DigestorOperatingStatusApiResponse,
DigestorOperatingStatusSaveRequest,
DigestorOperatingStatusSaveResponse,
DigestorOperatingStatusSubmitRequest,
DigestorOperatingStatusSubmitResponse,
ExcretaSlurgeProcessingStatusApiResponse,
ExcretaSlurgeProcessingStatusSaveRequest,
ExcretaSlurgeProcessingStatusSaveResponse,
ExcretaSlurgeProcessingStatusSubmitRequest,
ExcretaSlurgeProcessingStatusSubmitResponse,
PublicSewageFacilitiesListApiResponse,
PublicSewageFacilitiesListRequest,
SewageExcretaSlurgeRequestParams,
SewageSlurgeProcessingFacStatusApiResponse,
SewageSlurgeProcessingFacStatusSaveRequest,
SewageSlurgeProcessingFacStatusSaveResponse,
SewageSlurgeProcessingFacStatusSubmitRequest,
SewageSlurgeProcessingFacStatusSubmitResponse,
SlurgeProcessingFacStatusApiResponse,
SlurgeProcessingFacStatusSaveRequest,
SlurgeProcessingFacStatusSaveResponse,
SlurgeProcessingFacStatusSubmitRequest,
SlurgeProcessingFacStatusSubmitResponse,
StatisticsInputSewageExcretaSlurgeService,
} from "../../model/input/statistics-input-sewage-excreta-slurge-interface";
const BASE = `${ENDPOINT.ST_SERVICE.INPUT}/sewage-excreta-slurge`;
export class StatisticsInputSewageExcretaSlurgeApiService
implements StatisticsInputSewageExcretaSlurgeService
{
/** 찌꺼기(슬러지)처리시설현황 조회 — ST00110001 */
public async getSlurgeProcessingFacStatusList(
params: SewageExcretaSlurgeRequestParams,
): Promise<SlurgeProcessingFacStatusApiResponse> {
const response = await stClient.get<SlurgeProcessingFacStatusApiResponse>(
`${BASE}/slurge-processing-fac-status`,
withAuthHeader({ params }),
);
return response.data;
}
/** 찌꺼기(슬러지)처리시설현황 저장 — ST00110001 */
public async saveSlurgeProcessingFacStatus(
request: SlurgeProcessingFacStatusSaveRequest,
): Promise<SlurgeProcessingFacStatusSaveResponse> {
const response = await stClient.put<SlurgeProcessingFacStatusSaveResponse>(
`${BASE}/slurge-processing-fac-status/save`,
request,
);
return response.data;
}
/** 찌꺼기(슬러지)처리시설현황 제출 — ST00110001 */
public async submitSlurgeProcessingFacStatus(
request: SlurgeProcessingFacStatusSubmitRequest,
): Promise<SlurgeProcessingFacStatusSubmitResponse> {
const response = await stClient.put<SlurgeProcessingFacStatusSubmitResponse>(
`${BASE}/slurge-processing-fac-status/submit`,
request,
);
return response.data;
}
/** 소화조 운영현황 조회 — ST00110002 */
public async getDigestorOperatingStatusList(
params: SewageExcretaSlurgeRequestParams,
): Promise<DigestorOperatingStatusApiResponse> {
const response = await stClient.get<DigestorOperatingStatusApiResponse>(
`${BASE}/digestor-operating-status`,
withAuthHeader({ params }),
);
return response.data;
}
/** 소화조 운영현황 저장 — ST00110002 */
public async saveDigestorOperatingStatus(
request: DigestorOperatingStatusSaveRequest,
): Promise<DigestorOperatingStatusSaveResponse> {
const response = await stClient.put<DigestorOperatingStatusSaveResponse>(
`${BASE}/digestor-operating-status/save`,
request,
);
return response.data;
}
/** 소화조 운영현황 제출 — ST00110002 */
public async submitDigestorOperatingStatus(
request: DigestorOperatingStatusSubmitRequest,
): Promise<DigestorOperatingStatusSubmitResponse> {
const response = await stClient.put<DigestorOperatingStatusSubmitResponse>(
`${BASE}/digestor-operating-status/submit`,
request,
);
return response.data;
}
/** 하수찌꺼기 처리시설 운영현황 조회 — ST00110003 */
public async getSewageSlurgeProcessingFacStatusList(
params: SewageExcretaSlurgeRequestParams,
): Promise<SewageSlurgeProcessingFacStatusApiResponse> {
const response = await stClient.get<SewageSlurgeProcessingFacStatusApiResponse>(
`${BASE}/sewage-slurge-processing-fac-status`,
withAuthHeader({ params }),
);
return response.data;
}
/** 하수찌꺼기 처리시설 운영현황 저장 — ST00110003 */
public async saveSewageSlurgeProcessingFacStatus(
request: SewageSlurgeProcessingFacStatusSaveRequest,
): Promise<SewageSlurgeProcessingFacStatusSaveResponse> {
const response = await stClient.put<SewageSlurgeProcessingFacStatusSaveResponse>(
`${BASE}/sewage-slurge-processing-fac-status/save`,
request,
);
return response.data;
}
/** 하수찌꺼기 처리시설 운영현황 제출 — ST00110003 */
public async submitSewageSlurgeProcessingFacStatus(
request: SewageSlurgeProcessingFacStatusSubmitRequest,
): Promise<SewageSlurgeProcessingFacStatusSubmitResponse> {
const response = await stClient.put<SewageSlurgeProcessingFacStatusSubmitResponse>(
`${BASE}/sewage-slurge-processing-fac-status/submit`,
request,
);
return response.data;
}
/** 분뇨찌꺼기(슬러지)처리현황 조회 — ST00110004 */
public async getExcretaSlurgeProcessingStatusList(
params: SewageExcretaSlurgeRequestParams,
): Promise<ExcretaSlurgeProcessingStatusApiResponse> {
const response = await stClient.get<ExcretaSlurgeProcessingStatusApiResponse>(
`${BASE}/excreta-slurge-processing-status`,
withAuthHeader({ params }),
);
return response.data;
}
/** 분뇨찌꺼기(슬러지)처리현황 저장 — ST00110004 */
public async saveExcretaSlurgeProcessingStatus(
request: ExcretaSlurgeProcessingStatusSaveRequest,
): Promise<ExcretaSlurgeProcessingStatusSaveResponse> {
const response = await stClient.put<ExcretaSlurgeProcessingStatusSaveResponse>(
`${BASE}/excreta-slurge-processing-status/save`,
request,
);
return response.data;
}
/** 분뇨찌꺼기(슬러지)처리현황 제출 — ST00110004 */
public async submitExcretaSlurgeProcessingStatus(
request: ExcretaSlurgeProcessingStatusSubmitRequest,
): Promise<ExcretaSlurgeProcessingStatusSubmitResponse> {
const response = await stClient.put<ExcretaSlurgeProcessingStatusSubmitResponse>(
`${BASE}/excreta-slurge-processing-status/submit`,
request,
);
return response.data;
}
/** 공공하수처리시설 목록 조회 */
public async getPublicSewageFacilitiesList(
params: PublicSewageFacilitiesListRequest,
): Promise<PublicSewageFacilitiesListApiResponse> {
const response = await stClient.get<PublicSewageFacilitiesListApiResponse>(
`${BASE}/public-sewage-facilities`,
withAuthHeader({ params }),
);
return response.data;
}
}
export const statisticsInputSewageExcretaSlurgeApi =
new StatisticsInputSewageExcretaSlurgeApiService();
@@ -0,0 +1,328 @@
import type { ApiResponse, SewerageStatusInfo } from "../statistics-interface";
/** 하수·분뇨관련산업 — 공공기관 하수분야(ST00120001) `PublicInstitutionSewerIndustryInpColumn.tabKey` */
export const SEWAGE_EXCRETA_PUBLIC_INSTITUTION_SEWER_STATS_CD = "ST00120001" as const;
/** 검증 결과 한 건 */
export interface SewageExcretaRelatedVerificationResultItem {
vrfcCd: string;
rsnExpln: string;
nowVlCn: string;
compVlCn: string;
}
/** 필드명 → 검증 결과 배열 */
export type SewageExcretaRelatedVerificationResult = Record<
string,
SewageExcretaRelatedVerificationResultItem[]
>;
/** 조회 `data.commonInfo` */
export interface SewageExcretaRelatedCommonInfo {
statsYr: string;
ctpvNm: string;
sewerBzmnCd: string;
statsCd: string;
verificationResult?: SewageExcretaRelatedVerificationResult;
}
/** 하수·분뇨관련산업 조회 요청 파라미터 */
export interface SewageExcretaRelatedRequestParams {
ctpvNm?: string;
sggNm?: string;
sewerBzmnCd?: string;
statsYr?: string;
mode?: string;
}
/**
* ST00120001 조회 `data.publicInstitutionSewerIndustryList[]` 한 행.
* `PublicInstitutionSewerIndustryInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
*/
export interface PublicInstitutionSewerIndustryItem {
admdstCd: string;
sggNm: string;
admdstNm: string;
ognzSn: string;
ognzNm: string;
empGrssCnt: number;
pbadmsNope: number;
techWholNope: number;
engrkCnt: number;
mchnCnt: number;
prvtmCnt: number;
chmengCnt: number;
envCnt: number;
enjbEtcCnt: number;
etcCnt: number;
rmrk: string | null;
verificationResult?: SewageExcretaRelatedVerificationResult;
}
export interface PublicInstitutionSewerIndustryResponseData {
statusInfo: SewerageStatusInfo;
commonInfo: SewageExcretaRelatedCommonInfo;
publicInstitutionSewerIndustryList: PublicInstitutionSewerIndustryItem[];
}
export type PublicInstitutionSewerIndustryApiResponse =
ApiResponse<PublicInstitutionSewerIndustryResponseData> & {
message: string;
};
/** 하수·분뇨관련산업 — 공공기관 분뇨분야(ST00120002) `PublicInstitutionExcretaIndustryInpColumn.tabKey` */
export const SEWAGE_EXCRETA_PUBLIC_INSTITUTION_EXCRETA_STATS_CD = "ST00120002" as const;
/**
* ST00120002 조회 `data.publicInstitutionExcretaIndustryList[]` 한 행.
* `PublicInstitutionExcretaIndustryInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
*/
export interface PublicInstitutionExcretaIndustryItem {
admdstCd: string;
sggNm: string;
admdstNm: string;
ognzSn: string;
ognzNm: string;
empGrssCnt: number;
pbadmsNope: number;
techWholNope: number;
engrkCnt: number;
mchnCnt: number;
prvtmCnt: number;
chmengCnt: number;
envCnt: number;
enjbEtcCnt: number;
etcCnt: number;
rmrk: string | null;
verificationResult?: SewageExcretaRelatedVerificationResult;
}
export interface PublicInstitutionExcretaIndustryResponseData {
statusInfo: SewerageStatusInfo;
commonInfo: SewageExcretaRelatedCommonInfo;
publicInstitutionExcretaIndustryList: PublicInstitutionExcretaIndustryItem[];
}
export type PublicInstitutionExcretaIndustryApiResponse =
ApiResponse<PublicInstitutionExcretaIndustryResponseData> & {
message: string;
};
/** 하수·분뇨관련산업 — 분뇨수집·운반업(ST00120003) `ExcretaRelatedIndustryInpColumn.tabKey` */
export const SEWAGE_EXCRETA_EXCRETA_RELATED_INDUSTRY_STATS_CD = "ST00120003" as const;
/**
* ST00120003 조회 `data.excretaRelatedIndustryList[]` 한 행.
* `ExcretaRelatedIndustryInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
*/
export interface ExcretaRelatedIndustryItem {
admdstCd: string;
sggNm: string;
admdstNm: string;
bzentyCnt: number;
empNope: number;
fcltSecrPrstCnt: number;
n3TonUdrCnt: number;
n4TonUdrCnt: number;
n8TonUdrCnt: number;
etcCnt: number;
clctCnvncPrfmncQnt: number;
rmrk: string | null;
verificationResult?: SewageExcretaRelatedVerificationResult;
}
export interface ExcretaRelatedIndustryResponseData {
statusInfo: SewerageStatusInfo;
commonInfo: SewageExcretaRelatedCommonInfo;
excretaRelatedIndustryList: ExcretaRelatedIndustryItem[];
}
export type ExcretaRelatedIndustryApiResponse = ApiResponse<ExcretaRelatedIndustryResponseData> & {
message: string;
};
/** 하수·분뇨관련산업 — 개인하수처리관련업(ST00120004) `PrivateSewageTreatRelatedIndustryInpColumn.tabKey` */
export const SEWAGE_EXCRETA_PRIVATE_SEWAGE_TREAT_RELATED_INDUSTRY_STATS_CD = "ST00120004" as const;
/**
* ST00120004 조회 `data.privateSewageTreatRelatedIndustryList[]` 한 행.
* `PrivateSewageTreatRelatedIndustryInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
*/
export interface PrivateSewageTreatRelatedIndustryItem {
admdstCd: string;
sggNm: string;
admdstNm: string;
designMdsrCnt: number;
designMdsrNope: number;
mfbizCnt: number;
mfbizMdsrNope: number;
mngCnt: number;
mngMdsrNope: number;
rmrk: string | null;
verificationResult?: SewageExcretaRelatedVerificationResult;
}
export interface PrivateSewageTreatRelatedIndustryResponseData {
statusInfo: SewerageStatusInfo;
commonInfo: SewageExcretaRelatedCommonInfo;
privateSewageTreatRelatedIndustryList: PrivateSewageTreatRelatedIndustryItem[];
}
export type PrivateSewageTreatRelatedIndustryApiResponse =
ApiResponse<PrivateSewageTreatRelatedIndustryResponseData> & {
message: string;
};
/** ST00120001·ST00120002 저장 — `saveList` / `deleteList` 항목 (`sggNm`·계산필드·검증결과 제외) */
export type PublicInstitutionSewerIndustrySaveItem = Omit<
PublicInstitutionSewerIndustryItem,
"sggNm" | "verificationResult" | "empGrssCnt" | "techWholNope"
>;
export type PublicInstitutionExcretaIndustrySaveItem = Omit<
PublicInstitutionExcretaIndustryItem,
"sggNm" | "verificationResult" | "empGrssCnt" | "techWholNope"
>;
/** ST00120003·ST00120004 저장 — `saveList` 항목 (`sggNm`·계산필드·검증결과 제외) */
export type ExcretaRelatedIndustrySaveItem = Omit<
ExcretaRelatedIndustryItem,
"sggNm" | "verificationResult" | "fcltSecrPrstCnt"
>;
export type PrivateSewageTreatRelatedIndustrySaveItem = Omit<
PrivateSewageTreatRelatedIndustryItem,
"sggNm" | "verificationResult"
>;
export interface SewageExcretaRelatedSaveRequestBase {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
superAdmin?: string;
}
export interface PublicInstitutionSewerIndustrySaveRequest extends SewageExcretaRelatedSaveRequestBase {
noApplicable?: boolean;
saveList: PublicInstitutionSewerIndustrySaveItem[];
deleteList: PublicInstitutionSewerIndustrySaveItem[];
}
export interface PublicInstitutionExcretaIndustrySaveRequest extends SewageExcretaRelatedSaveRequestBase {
noApplicable?: boolean;
saveList: PublicInstitutionExcretaIndustrySaveItem[];
deleteList: PublicInstitutionExcretaIndustrySaveItem[];
}
export interface ExcretaRelatedIndustrySaveRequest extends SewageExcretaRelatedSaveRequestBase {
saveList: ExcretaRelatedIndustrySaveItem[];
}
export interface PrivateSewageTreatRelatedIndustrySaveRequest extends SewageExcretaRelatedSaveRequestBase {
saveList: PrivateSewageTreatRelatedIndustrySaveItem[];
}
export type SewageExcretaRelatedSaveResponse = ApiResponse<unknown> & {
message?: string;
};
export interface SewageExcretaRelatedSubmitRequestBase extends SewageExcretaRelatedSaveRequestBase {
laePicNm: string;
laePicTelNo: string;
laeKbrdrDeptNm: string;
laeKbrdrJbgdNm: string;
laeIdfrNm: string;
laeIdfrTelNo: string;
laeIdfrDeptNm: string;
laeIdfrJbgdNm: string;
}
export type PublicInstitutionSewerIndustrySubmitItem = PublicInstitutionSewerIndustrySaveItem;
export interface PublicInstitutionSewerIndustrySubmitRequest extends SewageExcretaRelatedSubmitRequestBase {
noApplicable?: boolean;
submitList: PublicInstitutionSewerIndustrySubmitItem[];
deleteList: PublicInstitutionSewerIndustrySubmitItem[];
}
export type PublicInstitutionExcretaIndustrySubmitItem = PublicInstitutionExcretaIndustrySaveItem;
export interface PublicInstitutionExcretaIndustrySubmitRequest extends SewageExcretaRelatedSubmitRequestBase {
noApplicable?: boolean;
submitList: PublicInstitutionExcretaIndustrySubmitItem[];
deleteList: PublicInstitutionExcretaIndustrySubmitItem[];
}
export type ExcretaRelatedIndustrySubmitItem = ExcretaRelatedIndustrySaveItem;
export interface ExcretaRelatedIndustrySubmitRequest extends SewageExcretaRelatedSubmitRequestBase {
submitList: ExcretaRelatedIndustrySubmitItem[];
}
export type PrivateSewageTreatRelatedIndustrySubmitItem = PrivateSewageTreatRelatedIndustrySaveItem;
export interface PrivateSewageTreatRelatedIndustrySubmitRequest extends SewageExcretaRelatedSubmitRequestBase {
submitList: PrivateSewageTreatRelatedIndustrySubmitItem[];
}
export interface SewageExcretaRelatedSubmitResponse {
status: string;
message?: string;
data?: {
finalStatus: string;
nvpassed: boolean;
};
}
export interface StatisticsInputSewageExcretaRelatedService {
/** 공공기관 하수분야 조회 — ST00120001 */
getPublicInstitutionSewerIndustryList(
params: SewageExcretaRelatedRequestParams,
): Promise<PublicInstitutionSewerIndustryApiResponse>;
/** 공공기관 하수분야 저장 — ST00120001 */
savePublicInstitutionSewerIndustry(
request: PublicInstitutionSewerIndustrySaveRequest,
): Promise<SewageExcretaRelatedSaveResponse>;
/** 공공기관 하수분야 제출 — ST00120001 */
submitPublicInstitutionSewerIndustry(
request: PublicInstitutionSewerIndustrySubmitRequest,
): Promise<SewageExcretaRelatedSubmitResponse>;
/** 공공기관 분뇨분야 조회 — ST00120002 */
getPublicInstitutionExcretaIndustryList(
params: SewageExcretaRelatedRequestParams,
): Promise<PublicInstitutionExcretaIndustryApiResponse>;
/** 공공기관 분뇨분야 저장 — ST00120002 */
savePublicInstitutionExcretaIndustry(
request: PublicInstitutionExcretaIndustrySaveRequest,
): Promise<SewageExcretaRelatedSaveResponse>;
/** 공공기관 분뇨분야 제출 — ST00120002 */
submitPublicInstitutionExcretaIndustry(
request: PublicInstitutionExcretaIndustrySubmitRequest,
): Promise<SewageExcretaRelatedSubmitResponse>;
/** 분뇨수집·운반업 조회 — ST00120003 */
getExcretaRelatedIndustryList(
params: SewageExcretaRelatedRequestParams,
): Promise<ExcretaRelatedIndustryApiResponse>;
/** 분뇨수집·운반업 저장 — ST00120003 */
saveExcretaRelatedIndustry(
request: ExcretaRelatedIndustrySaveRequest,
): Promise<SewageExcretaRelatedSaveResponse>;
/** 분뇨수집·운반업 제출 — ST00120003 */
submitExcretaRelatedIndustry(
request: ExcretaRelatedIndustrySubmitRequest,
): Promise<SewageExcretaRelatedSubmitResponse>;
/** 개인하수처리관련업 조회 — ST00120004 */
getPrivateSewageTreatRelatedIndustryList(
params: SewageExcretaRelatedRequestParams,
): Promise<PrivateSewageTreatRelatedIndustryApiResponse>;
/** 개인하수처리관련업 저장 — ST00120004 */
savePrivateSewageTreatRelatedIndustry(
request: PrivateSewageTreatRelatedIndustrySaveRequest,
): Promise<SewageExcretaRelatedSaveResponse>;
/** 개인하수처리관련업 제출 — ST00120004 */
submitPrivateSewageTreatRelatedIndustry(
request: PrivateSewageTreatRelatedIndustrySubmitRequest,
): Promise<SewageExcretaRelatedSubmitResponse>;
}
@@ -0,0 +1,539 @@
import type { ApiResponse, SewerageStatusInfo } from "../statistics-interface";
/** 슬러지 처리 — 찌꺼기(슬러지)처리시설현황(ST00110001) `SlurgeProcessingFacStatusInpColumn.tabKey` */
export const SEWAGE_EXCRETA_SLURGE_PROCESSING_FAC_STATUS_STATS_CD = "ST00110001" as const;
/** 슬러지 처리 — 소화조 운영현황(ST00110002) `DigestorOperatingStatusInpColumn.tabKey` */
export const SEWAGE_EXCRETA_DIGESTOR_OPERATING_STATS_CD = "ST00110002" as const;
/** 슬러지 처리 — 하수찌꺼기 처리시설 운영현황(ST00110003) `SewageSlurgeProcessingFacStatusInpColumn.tabKey` */
export const SEWAGE_EXCRETA_SEWAGE_SLURGE_FAC_STATUS_STATS_CD = "ST00110003" as const;
/** 슬러지 처리 — 분뇨찌꺼기(슬러지)처리현황(ST00110004) `ExcretaSlurgeProcessingStatusInpColumn.tabKey` */
export const SEWAGE_EXCRETA_EXCRETA_SLURGE_PROCESSING_STATS_CD = "ST00110004" as const;
/** 검증 결과 한 건 */
export interface SewageExcretaSlurgeVerificationResultItem {
vrfcCd: string;
rsnExpln: string;
nowVlCn: string;
compVlCn: string;
}
/** 필드명 → 검증 결과 배열 */
export type SewageExcretaSlurgeVerificationResult = Record<
string,
SewageExcretaSlurgeVerificationResultItem[]
>;
/** 조회 `data.commonInfo` */
export interface SewageExcretaSlurgeCommonInfo {
statsYr: string;
ctpvNm: string;
sewerBzmnCd: string;
statsCd: string;
verificationResult?: SewageExcretaSlurgeVerificationResult;
}
/** 슬러지 처리 조회 요청 파라미터 */
export interface SewageExcretaSlurgeRequestParams {
ctpvNm?: string;
sggNm?: string;
sewerBzmnCd?: string;
statsYr?: string;
fcltNm?: string;
mode?: string;
}
/**
* ST00110001 조회 `data.slurgeProcessingFacStatusList[]` 한 행.
* `SlurgeProcessingFacStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
*/
export interface SlurgeProcessingFacStatusItem {
admdstCd: string;
sggNm: string;
admdstNm: string;
fcltSn: string;
swtrmtFcltNm: string;
swtrmtFcltCd: string;
gnamWhol: number;
itslfQnt: number;
otsdInflwQnt: number;
transfTmplntNm: string;
transfPrcsQnt: number;
srpFncRt: number;
wholSrpPrcsQnt: number;
itslfTs1Whol: number;
itslfTs1RclmQnt: number;
itslfTs1IncnrQnt: number;
incnrPrcsWhol: number;
incnrPrcsLfvlm: number;
incnrPrcsPrdctRmtrlQnt: number;
incnrPrcsFmlyrQnt: number;
incnrPrcsFcltNm: string;
itslfTs1AltdQnt: number;
stbznPrcsWhol: number;
stbznPrcsLfvlm: number;
stbznPrcsFmlyrQnt: number;
stbznPrcsFcltNm: string;
itslfTs1DryQnt: number;
dryPrcsWhol: number;
dryPrcsLfvlm: number;
dryPrcsIncnrQnt: number;
dryPrcsFuelQnt: number;
dryPrcsPrdctRmtrlQnt: number;
dryPrcsFmlyrQnt: number;
dryPrcsCmpstgQnt: number;
dryPrcsFcltNm: string;
itslfTs1FuelQnt: number;
fuelPrcsWhol: number;
fuelPrcsIncnrQnt: number;
fuelPrcsFuelQnt: number;
fuelPrcsFcltNm: string;
itslfTs2CmpstgQnt: number;
cmpsPrcsFcltBzentyNm: string;
otsdCnsgnWhol: number;
otsdCnsgnRclmQnt: number;
otsdCnsgnIncnrQnt: number;
otsdCnsgnFuelPwplQnt: number;
otsdCnsgnPrdctRmtrlQnt: number;
otsdCnsgnFmlyrQnt: number;
otsdCnsgnCmpstgQnt: number;
otsdCnsgnFcltNm: string;
cparTs1Whol: number;
rmrk: string | null;
verificationResult?: SewageExcretaSlurgeVerificationResult;
}
export interface SlurgeProcessingFacStatusResponseData {
statusInfo: SewerageStatusInfo;
commonInfo: SewageExcretaSlurgeCommonInfo;
slurgeProcessingFacStatusList: SlurgeProcessingFacStatusItem[];
}
export type SlurgeProcessingFacStatusApiResponse =
ApiResponse<SlurgeProcessingFacStatusResponseData> & {
message: string;
};
/**
* ST00110001 저장 — `saveList` / `deleteList` 항목.
* `sggNm`·계산필드·검증결과는 저장 요청에서 제외.
*/
export type SlurgeProcessingFacStatusSaveItem = Omit<
SlurgeProcessingFacStatusItem,
| "sggNm"
| "verificationResult"
| "gnamWhol"
| "wholSrpPrcsQnt"
| "itslfTs1Whol"
| "incnrPrcsWhol"
| "stbznPrcsWhol"
| "dryPrcsWhol"
| "fuelPrcsWhol"
| "otsdCnsgnWhol"
>;
/** ST00110001 저장 API 요청 */
export interface SlurgeProcessingFacStatusSaveRequest {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
superAdmin?: string;
noApplicable?: boolean;
saveList: SlurgeProcessingFacStatusSaveItem[];
deleteList: SlurgeProcessingFacStatusSaveItem[];
}
export type SlurgeProcessingFacStatusSaveResponse = ApiResponse<unknown> & {
message?: string;
};
export type SlurgeProcessingFacStatusSubmitItem = SlurgeProcessingFacStatusSaveItem;
/** ST00110001 제출 API 요청 */
export interface SlurgeProcessingFacStatusSubmitRequest {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
laePicNm: string;
laePicTelNo: string;
laeKbrdrDeptNm: string;
laeKbrdrJbgdNm: string;
laeIdfrNm: string;
laeIdfrTelNo: string;
laeIdfrDeptNm: string;
laeIdfrJbgdNm: string;
superAdmin?: string;
noApplicable?: boolean;
submitList: SlurgeProcessingFacStatusSubmitItem[];
deleteList: SlurgeProcessingFacStatusSubmitItem[];
}
export interface SlurgeProcessingFacStatusSubmitResponse {
status: string;
message?: string;
data?: {
finalStatus: string;
nvpassed: boolean;
};
}
/**
* ST00110002 조회 `data.digestorOperatingStatusList[]` 한 행.
* `DigestorOperatingStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
*/
export interface DigestorOperatingStatusItem {
admdstCd: string;
sggNm: string;
admdstNm: string;
fcltSn: string;
swtrmtFcltCd: string;
swtrmtFcltNm: string;
digstnEnYn: string;
digstnCpct: number;
actlDrvnCpct: number;
digstnGasInputQnt: number;
digstnGasInputSldDnst: number;
digstnTnkOprtngDayCnt: number;
ocrnGasQnt: number;
digstnGasUtztnWholPrst: number;
digstnGasUtztnNtslQnt: number;
digstnGasUtztnEtgtQnt: number;
digstnGasUtztnItslfQnt: number;
digstnGasUtztnEtcQnt: number;
surplsGasQnt: number;
rmrk: string | null;
verificationResult?: SewageExcretaSlurgeVerificationResult;
}
export interface DigestorOperatingStatusResponseData {
statusInfo: SewerageStatusInfo;
commonInfo: SewageExcretaSlurgeCommonInfo;
digestorOperatingStatusList: DigestorOperatingStatusItem[];
}
export type DigestorOperatingStatusApiResponse =
ApiResponse<DigestorOperatingStatusResponseData> & {
message: string;
};
/**
* ST00110002 저장 — `saveList` 항목.
* `sggNm`·계산필드·검증결과는 저장 요청에서 제외.
*/
export type DigestorOperatingStatusSaveItem = Omit<
DigestorOperatingStatusItem,
"sggNm" | "verificationResult" | "digstnGasUtztnWholPrst"
>;
/** ST00110002 저장 API 요청 */
export interface DigestorOperatingStatusSaveRequest {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
superAdmin?: string;
noApplicable?: boolean;
saveList: DigestorOperatingStatusSaveItem[];
deleteList?: DigestorOperatingStatusSaveItem[];
}
export type DigestorOperatingStatusSaveResponse = ApiResponse<unknown> & {
message?: string;
};
export type DigestorOperatingStatusSubmitItem = DigestorOperatingStatusSaveItem;
/** ST00110002 제출 API 요청 */
export interface DigestorOperatingStatusSubmitRequest {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
laePicNm: string;
laePicTelNo: string;
laeKbrdrDeptNm: string;
laeKbrdrJbgdNm: string;
laeIdfrNm: string;
laeIdfrTelNo: string;
laeIdfrDeptNm: string;
laeIdfrJbgdNm: string;
superAdmin?: string;
noApplicable?: boolean;
submitList: DigestorOperatingStatusSubmitItem[];
}
export interface DigestorOperatingStatusSubmitResponse {
status: string;
message?: string;
data?: {
finalStatus: string;
nvpassed: boolean;
};
}
/**
* ST00110003 조회 `data.sewageSlurgeProcessingFacStatusList[]` 한 행.
* `SewageSlurgeProcessingFacStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
*/
export interface SewageSlurgeProcessingFacStatusItem {
admdstCd: string;
sggNm: string;
admdstNm: string;
fcltSn: string;
fcltNm: string;
prcsMthExpln: string;
fcltCpct: number;
anlPrcsQnt: number;
dayAvgOprtngHr: number;
anlOprtngDayCnt: number;
oprtngRt: number;
rmrk: string | null;
fcltPstnCn: string;
verificationResult?: SewageExcretaSlurgeVerificationResult;
}
export interface SewageSlurgeProcessingFacStatusResponseData {
statusInfo: SewerageStatusInfo;
commonInfo: SewageExcretaSlurgeCommonInfo;
sewageSlurgeProcessingFacStatusList: SewageSlurgeProcessingFacStatusItem[];
}
export type SewageSlurgeProcessingFacStatusApiResponse =
ApiResponse<SewageSlurgeProcessingFacStatusResponseData> & {
message: string;
};
/**
* ST00110003 저장 — `saveList` / `deleteList` 항목.
* `sggNm`·계산필드·검증결과·`fcltPstnCn`은 저장 요청에서 제외.
*/
export type SewageSlurgeProcessingFacStatusSaveItem = Omit<
SewageSlurgeProcessingFacStatusItem,
"sggNm" | "verificationResult" | "oprtngRt" | "fcltPstnCn"
>;
/** ST00110003 저장 API 요청 */
export interface SewageSlurgeProcessingFacStatusSaveRequest {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
superAdmin?: string;
noApplicable?: boolean;
saveList: SewageSlurgeProcessingFacStatusSaveItem[];
deleteList: SewageSlurgeProcessingFacStatusSaveItem[];
}
export type SewageSlurgeProcessingFacStatusSaveResponse = ApiResponse<unknown> & {
message?: string;
};
export type SewageSlurgeProcessingFacStatusSubmitItem =
SewageSlurgeProcessingFacStatusSaveItem;
/** ST00110003 제출 API 요청 */
export interface SewageSlurgeProcessingFacStatusSubmitRequest {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
laePicNm: string;
laePicTelNo: string;
laeKbrdrDeptNm: string;
laeKbrdrJbgdNm: string;
laeIdfrNm: string;
laeIdfrTelNo: string;
laeIdfrDeptNm: string;
laeIdfrJbgdNm: string;
superAdmin?: string;
noApplicable?: boolean;
submitList: SewageSlurgeProcessingFacStatusSubmitItem[];
deleteList: SewageSlurgeProcessingFacStatusSubmitItem[];
}
export interface SewageSlurgeProcessingFacStatusSubmitResponse {
status: string;
message?: string;
data?: {
finalStatus: string;
nvpassed: boolean;
};
}
/**
* ST00110004 조회 `data.excretaSlurgeProcessingStatusList[]` 한 행.
* `ExcretaSlurgeProcessingStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
*/
export interface ExcretaSlurgeProcessingStatusItem {
admdstCd: string;
sggNm: string;
admdstNm: string;
fcltSn: string;
fcltNm: string;
fcltPstnCn: string;
gnam: number;
wholDspsQnt: number;
rcycQnt: number;
olandLfvlm: number;
incnrQnt: number;
oceanInputQnt: number;
fuelQnt: number;
etcQnt: number;
nondspsQnt: number;
swtrmtFcltNm: string;
rmrk: string | null;
verificationResult?: SewageExcretaSlurgeVerificationResult;
}
export interface ExcretaSlurgeProcessingStatusResponseData {
statusInfo: SewerageStatusInfo;
commonInfo: SewageExcretaSlurgeCommonInfo;
excretaSlurgeProcessingStatusList: ExcretaSlurgeProcessingStatusItem[];
}
export type ExcretaSlurgeProcessingStatusApiResponse =
ApiResponse<ExcretaSlurgeProcessingStatusResponseData> & {
message: string;
};
/**
* ST00110004 저장 — `saveList` 항목.
* `sggNm`·계산필드(`gnam`, `wholDspsQnt`)·검증결과는 저장 요청에서 제외.
*/
export type ExcretaSlurgeProcessingStatusSaveItem = Omit<
ExcretaSlurgeProcessingStatusItem,
"sggNm" | "verificationResult" | "gnam" | "wholDspsQnt"
>;
/** ST00110004 저장 API 요청 */
export interface ExcretaSlurgeProcessingStatusSaveRequest {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
superAdmin?: string;
noApplicable?: boolean;
saveList: ExcretaSlurgeProcessingStatusSaveItem[];
}
export type ExcretaSlurgeProcessingStatusSaveResponse = ApiResponse<unknown> & {
message?: string;
};
export type ExcretaSlurgeProcessingStatusSubmitItem = ExcretaSlurgeProcessingStatusSaveItem;
/** ST00110004 제출 API 요청 */
export interface ExcretaSlurgeProcessingStatusSubmitRequest {
statsYr: string;
ctpvNm: string;
sggNm: string;
sewerBzmnCd: string;
userId: string;
laePicNm: string;
laePicTelNo: string;
laeKbrdrDeptNm: string;
laeKbrdrJbgdNm: string;
laeIdfrNm: string;
laeIdfrTelNo: string;
laeIdfrDeptNm: string;
laeIdfrJbgdNm: string;
superAdmin?: string;
noApplicable?: boolean;
submitList: ExcretaSlurgeProcessingStatusSubmitItem[];
}
export interface ExcretaSlurgeProcessingStatusSubmitResponse {
status: string;
message?: string;
data?: {
finalStatus: string;
nvpassed: boolean;
};
}
/** `public-sewage-facilities` 조회 요청 */
export interface PublicSewageFacilitiesListRequest {
statsYr: string;
sewerBzmnCd: string;
ctpvNm: string;
sggNm: string;
}
/** `public-sewage-facilities` 조회 `data[]` 한 행 */
export interface PublicSewageFacilityItem {
admdstCd: string;
admdstNm: string;
swtrmtFcltCd: string;
swtrmtFcltNm: string;
fcltSn: string;
}
export type PublicSewageFacilitiesListApiResponse = ApiResponse<PublicSewageFacilityItem[]> & {
message: string;
};
export interface StatisticsInputSewageExcretaSlurgeService {
/** 찌꺼기(슬러지)처리시설현황 조회 — ST00110001 */
getSlurgeProcessingFacStatusList(
params: SewageExcretaSlurgeRequestParams,
): Promise<SlurgeProcessingFacStatusApiResponse>;
/** 찌꺼기(슬러지)처리시설현황 저장 — ST00110001 */
saveSlurgeProcessingFacStatus(
request: SlurgeProcessingFacStatusSaveRequest,
): Promise<SlurgeProcessingFacStatusSaveResponse>;
/** 찌꺼기(슬러지)처리시설현황 제출 — ST00110001 */
submitSlurgeProcessingFacStatus(
request: SlurgeProcessingFacStatusSubmitRequest,
): Promise<SlurgeProcessingFacStatusSubmitResponse>;
/** 소화조 운영현황 조회 — ST00110002 */
getDigestorOperatingStatusList(
params: SewageExcretaSlurgeRequestParams,
): Promise<DigestorOperatingStatusApiResponse>;
/** 소화조 운영현황 저장 — ST00110002 */
saveDigestorOperatingStatus(
request: DigestorOperatingStatusSaveRequest,
): Promise<DigestorOperatingStatusSaveResponse>;
/** 소화조 운영현황 제출 — ST00110002 */
submitDigestorOperatingStatus(
request: DigestorOperatingStatusSubmitRequest,
): Promise<DigestorOperatingStatusSubmitResponse>;
/** 하수찌꺼기 처리시설 운영현황 조회 — ST00110003 */
getSewageSlurgeProcessingFacStatusList(
params: SewageExcretaSlurgeRequestParams,
): Promise<SewageSlurgeProcessingFacStatusApiResponse>;
/** 하수찌꺼기 처리시설 운영현황 저장 — ST00110003 */
saveSewageSlurgeProcessingFacStatus(
request: SewageSlurgeProcessingFacStatusSaveRequest,
): Promise<SewageSlurgeProcessingFacStatusSaveResponse>;
/** 하수찌꺼기 처리시설 운영현황 제출 — ST00110003 */
submitSewageSlurgeProcessingFacStatus(
request: SewageSlurgeProcessingFacStatusSubmitRequest,
): Promise<SewageSlurgeProcessingFacStatusSubmitResponse>;
/** 분뇨찌꺼기(슬러지)처리현황 조회 — ST00110004 */
getExcretaSlurgeProcessingStatusList(
params: SewageExcretaSlurgeRequestParams,
): Promise<ExcretaSlurgeProcessingStatusApiResponse>;
/** 분뇨찌꺼기(슬러지)처리현황 저장 — ST00110004 */
saveExcretaSlurgeProcessingStatus(
request: ExcretaSlurgeProcessingStatusSaveRequest,
): Promise<ExcretaSlurgeProcessingStatusSaveResponse>;
/** 분뇨찌꺼기(슬러지)처리현황 제출 — ST00110004 */
submitExcretaSlurgeProcessingStatus(
request: ExcretaSlurgeProcessingStatusSubmitRequest,
): Promise<ExcretaSlurgeProcessingStatusSubmitResponse>;
/** 공공하수처리시설 목록 조회 */
getPublicSewageFacilitiesList(
params: PublicSewageFacilitiesListRequest,
): Promise<PublicSewageFacilitiesListApiResponse>;
}