企业年报详情查询:社保人数和股东出资,比注册资本更能说明问题
集团采购部每年四月做一轮供应商复审,表格里有一栏叫“经营规模”,往年照抄注册资本。今年审计翻到三十家供应商的底稿,问了一句:这三十家注册资本都在一千万以上,为什么有两家去年就停业了。
复审真正想确认的只有两件事:这家公司现在还有没有人在正常上班,股东的钱到底有没有真进来。注册资本是认缴口径,写在章程里,可以约定十年后才缴足,回答不了这两个问题;而企业自行填报并公示的年报,恰好有能回答这两件事的栏目。
改法很直接:把供应商发来的截图换掉,后端按企业名称或统一社会信用代码调一次企业年报详情,把社保参保人数和股东实缴出资落到复审表上。审计那条问题才算有了能写进流程的答案。文中公司名称、注册号、金额与日期均为官方文档测试数据,仅用于说明字段结构。
认缴写的是承诺,实缴写的是到账
章程上的注册资本是股东认缴的总额,可以分期到位,日期可以写得很远。年报的股东出资栏目把两种口径并排放:认缴出资额、认缴出资时间、认缴出资方式,以及实缴出资额、实缴出资时间、实缴出资方式。只看前者,等于只看了一张欠条。
判断供应商的体量,看差额更实在。认缴五千万、实缴为零的公司不该被一票否决——不少正常经营的公司确实在分期缴纳;但也不该按五千万的授信口径给账期。复审表里我加了两列:实缴占认缴的比例,以及实缴时间为空的条数。比例长期为零的转人工问一句,比例逐年爬升的说明股东还在往里投钱,是个正面信号。
只有一个 query 参数,三个请求头才是重点
接口是GET https://api.shuxuntech.com/v1/enterprise_report/query。请求头三个:appKey、timestamp(当前时间的毫秒数)、sign;query 只有一个keyword,可以填企业名称、统一社会信用代码或注册号。签名规则是sha256(appKey + timestamp + appSecret)。
三处容易错。时间戳要用 13 位毫秒,写成 10 位秒级,服务端算出的签名一定对不上;参与签名的 timestamp 字符串和放进请求头的那一个必须是同一个变量,前后各取一次时间就会差几毫秒;appSecret只能留在服务端,前端直连等于把密钥发给所有人。keyword优先填统一社会信用代码:企业改名后按名称查不到,代码一直指向同一主体。
一段能直接跑的 Python 调用
文档只给了字段,没给完整结构,所以解析不写死路径,按特征找数组,缺字段时降级而不是抛异常。
importhashlibimporttimeimportrequests APP_KEY="your_app_key"APP_SECRET="your_app_secret"URL="https://api.shuxuntech.com/v1/enterprise_report/query"deffetch(keyword:str,timeout=(0.8,4.0))->dict:ts=str(int(time.time()*1000))# 毫秒;签名与请求头共用同一个值sign=hashlib.sha256((APP_KEY+ts+APP_SECRET).encode("utf-8")).hexdigest()resp=requests.get(URL,params={"keyword":keyword},headers={"appKey":APP_KEY,"timestamp":ts,"sign":sign},timeout=timeout,)resp.raise_for_status()body=resp.json()ifbody.get("code")!="0":# 顶层码只说明这次调用成不成功raiseRuntimeError(f"call failed:{body.get('code')}{body.get('msg')}")returnbody.get("data")or{}defpartner_rows(data:dict)->list:# 股东出资那一栏:首个带 shouldCapi 键的字典数组forvindata.values():ifisinstance(v,list)andvandisinstance(v[0],dict)and"shouldCapi"inv[0]:returnvreturn[]defpaid_ratio(row:dict):# 认缴与实缴成对读;缺值返回 None,绝不当成 0try:returnround(float(row["realCapi"])/float(row["shouldCapi"]),4)except(KeyError,TypeError,ValueError,ZeroDivisionError):returnNoneif__name__=="__main__":forrowinpartner_rows(fetch("91330100MA2XXXXXXX")):print(row.get("name"),row.get("realCapi"),row.get("realDate"),paid_ratio(row))paid_ratio里那个except是故意的:认缴为零、实缴是未公示、字段缺失都会走到这里。让异常流成None,下游看到的是“没有数据可算”,而不是被 0 除或者假的 0%。
返回的是按年度组织的材料,不是当前状态
这个接口返回的不是快照,而是一份按报送年度组织的材料。企业基本信息里的名称、电话、地址、经营状态,都是填报时点的值:经营状态写“开业”,说的是那一年填报时的状态,不能当成今天的登记状态用。要判断主体现在是否存续、是否被列入异常名录,走登记信息类查询,不要拿年报替代。
还有一层:年报的部分栏目允许企业选择不公示。同一份年报里,有的栏目是数字,有的是企业未公示,有的是这一期没返回来。取值必须分三态——数字、企业未公示、接口未返回——下游处置完全不同。把后两种都塞成 0,资产、社保、纳税会一起失真,而且全程不报错。
社保栏量的是缴社保的人,不是员工总数
社保信息栏里的参保人数,量的是这家公司给自己员工缴社保的人数。它不等于员工总数:劳务派遣、外包、个体户用工都不在里面,各地申报口径也有差别。所以它适合当“这家公司还有没有人在正常上班”的证据,不适合直接换算营收。
纵向看比单年看有用。连续两三年人数稳定或小幅上升,说明业务还在运转;一年掉一半,同时实缴出资停滞、股东名单收缩,就是复审要当面问的问题。只看某一年的数字下结论,容易被一次组织架构调整带偏:把销售团队整体转成外包,参保人数会掉,业务未必掉。
和资产、纳税两栏交叉看才稳。社保人数稳、纳税额稳、实缴停滞,通常是股东不再追加投入但经营正常;三栏同时往下走,才值得拉响警报。任何一栏是未公示,就把这一栏标成“未披露”,而不是零。
七个出资字段,不要只看合计
股东及发起人出资信息里,文档给了七个字段:name股东或发起人、shouldCapi认缴出资额、shouldDate认缴出资时间、shouldType认缴出资方式、realCapi实缴出资额、realDate实缴出资时间、realType实缴出资方式。
三个配套字段都要看。出资方式决定“到账”的含金量:货币出资是真金白银,实物和知识产权出资要评估作价,账面数字和可动用现金不是一回事。出资时间和章程约定的期限要对:早于约定是提前到位,晚于约定还没缴,是合同里要补条款的。多名股东要逐条比,不能只看合计——一个大股东实缴到位、其余挂空,和平均到位,风险完全不同。
查完之后还要补的四件事
缓存按主体加年度。年报一年报送一次,复审季同一家公司会被不同部门查很多遍。缓存 key 用统一社会信用代码加报送年度,TTL 给到 30 天以上,既省调用也避免同一份材料在几个页面里长得不一样。
并发要合并。查询幂等,计费按次不幂等:页面刷新连点、批量导入里同一家公司出现三遍,都会各扣一次。用信用代码做短锁,后到的请求等前一个结果,几十秒内复用。
超时与重试分开。连接超时 800 毫秒、总超时 4 秒,复审页面有人在等。只对超时和系统类异常重试,上限两次,指数退避加随机抖动;鉴权、参数、额度类错误重试没有意义,直接告警到人。
脱敏与降级。响应里带电话、地址、股东姓名,都属于个人信息,日志只留调用流水号、结果码和信用代码后六位,不落完整号码和地址;快照按项目设留存期,到期只保留统计口径。接口持续异常时,页面回退到缓存里上一份快照,标注年度,同时把这家公司推进人工复核队列,不要让复审卡在加载动画上。
它不该承担的判断,和几条合规红线
这个接口不做实时监控,也不做审计结论。它给的是企业自行填报并公示的年报,不判断履约能力、涉诉、失信、经营异常——这些栏目文档里没有。新设企业当年可能还没到首次报送,查不到属于正常,不能推成“公司有问题”。个体户、分支机构的公示口径和有限公司不同,也不该套同一组阈值。
合规上守住四条:只用于供应商准入、授信评审、招投标资审这类有真实业务关系的场景,并在告知书里写清会委托第三方接口服务商核验企业公示信息;只取需要的栏目,不要把整份年报落库;展示和导出按规则打码;数据不长期留存、不二次对外提供。平台只做标准化封装,不采集、不留存原始数据。
价格、试用与接入顺序
免费试用 5 次,属于企业专用接口,需要企业认证后开通,企业认证还会额外赠送 666 次调用额度。标准单价 0.16 元/次,按调用量分档:
| 调用量 | 价格 | 单价 |
|---|---|---|
| 5 次 | ¥ 0 | ¥ 0 |
| 15 次 | ¥ 5 | ¥ 0.333333 |
| 500 次 | ¥ 120 | ¥ 0.24 |
| 1,000 次 | ¥ 220 | ¥ 0.22 |
| 5,000 次 | ¥ 1,000 | ¥ 0.2 |
| 10,000 次 | ¥ 1,900 | ¥ 0.19 |
| 30,000 次 | ¥ 5,500 | ¥ 0.183333 |
| 50,000 次 | ¥ 8,000 | ¥ 0.16 |
500 次档到 50,000 次档,单价从 0.24 元/次走到 0.16 元/次,但复审场景真正省钱的还是缓存:按主体年数计费,不按人次数。接入顺序建议是先用 5 次免费额度把签名、结果码分支和“企业未公示”三态跑通,再按实际供应商数量选档。额度叠加、有效期内不清零,采购后可开增值税发票。
把截图换成一次接口调用,复审会上争论的东西就从“这家公司靠不靠谱”变成了“社保人数为什么掉了四成、实缴为什么还是零”。前者没人答得上来,后者可以去问。
商品页:https://shuxuntech.com/productDetail/34
本文含商业推广信息,产品参数与价格整理自数勋科技官网,价格及活动以官网当期为准。