Pub 946 Compliance
This commit is contained in:
@@ -6,6 +6,7 @@ const { exportReport } = require('../services/reportExport');
|
||||
const { rowsFromImport, extensionForUpload } = require('../services/importExport');
|
||||
const glEntries = require('../services/glEntries');
|
||||
const glAccounts = require('../services/glAccounts');
|
||||
const section179Limitation = require('../services/section179Limitation');
|
||||
|
||||
const upload = multer({ storage: multer.memoryStorage(), limits: { fileSize: 16 * 1024 * 1024 } });
|
||||
const router = express.Router();
|
||||
@@ -79,6 +80,19 @@ router.delete('/gl-accounts/:id', ledgerEditor, (req, res) => {
|
||||
return res.status(204).end();
|
||||
});
|
||||
|
||||
// §179 return-level taxable-income limitation + carryover (per company + book + year).
|
||||
router.get('/section-179/limitation', ledgerReader, (req, res) => {
|
||||
const book = req.query.book || 'FEDERAL';
|
||||
const year = Number(req.query.year) || new Date().getFullYear();
|
||||
res.json({ summary: section179Limitation.summary(req.companyId, book, year, req.query.taxable_income) });
|
||||
});
|
||||
|
||||
router.put('/section-179/limitation', ledgerEditor, (req, res) => {
|
||||
const book = req.body.book || 'FEDERAL';
|
||||
const year = Number(req.body.year) || new Date().getFullYear();
|
||||
res.json({ summary: section179Limitation.save(req.companyId, book, year, req.body.taxable_income, req.user.id) });
|
||||
});
|
||||
|
||||
// GL posting defaults (the fallback accounts the ledgers post to).
|
||||
router.get('/gl-account-defaults', ledgerReader, (req, res) => {
|
||||
res.json({ defaults: glAccounts.getDefaults(req.companyId) });
|
||||
|
||||
@@ -6,6 +6,7 @@ const companies = require('../services/companies');
|
||||
const assetClasses = require('../services/assetClasses');
|
||||
const zones = require('../services/zones');
|
||||
const section179Limits = require('../services/section179Limits');
|
||||
const section280fLimits = require('../services/section280fLimits');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
@@ -67,6 +68,34 @@ router.delete('/section-179-limits/:year', requireCapability('config.manage'), (
|
||||
return res.status(204).end();
|
||||
});
|
||||
|
||||
// §280F passenger-automobile depreciation caps (indexed yearly; user-managed).
|
||||
router.get('/section-280f-limits', (req, res) => {
|
||||
res.json({ limits: section280fLimits.list() });
|
||||
});
|
||||
|
||||
router.post('/section-280f-limits', requireCapability('config.manage'), (req, res, next) => {
|
||||
try {
|
||||
res.status(201).json({ limit: section280fLimits.createLimit(req.body, req.user.id) });
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
router.put('/section-280f-limits/:year', requireCapability('config.manage'), (req, res, next) => {
|
||||
try {
|
||||
const limit = section280fLimits.updateLimit(req.params.year, req.body, req.user.id);
|
||||
if (!limit) return res.status(404).json({ error: 'Limit not found' });
|
||||
return res.json({ limit });
|
||||
} catch (error) {
|
||||
return next(error);
|
||||
}
|
||||
});
|
||||
|
||||
router.delete('/section-280f-limits/:year', requireCapability('config.manage'), (req, res) => {
|
||||
if (!section280fLimits.deleteLimit(req.params.year, req.user.id)) return res.status(404).json({ error: 'Limit not found' });
|
||||
return res.status(204).end();
|
||||
});
|
||||
|
||||
// Asset class catalog (seeded from the IRS tables, then user-managed). GET is reference
|
||||
// data used by the category picker; mutations require config.manage.
|
||||
router.get('/asset-classes', (req, res) => {
|
||||
|
||||
Reference in New Issue
Block a user